首页 文章

VB.NET比较日期,天,周以构建新的datetime变量

提问于
浏览
1

语言:VB.NET或C#请!

我正在尝试应用规则来确定具体日期并且失败了 .

客户选择一天(单选按钮):周一,周二,周三,周四,周五,周六,周日 .

我需要构建一个基于所选日期的SendOnDate DateTime变量,并将其与当前日期进行比较 . 应用这些基本规则:

  • 如果当前日期<=所选日期,则使用所选日期的周数日期(单选按钮) .

  • 如果当前日期是>所选日期,则使用所选日期的下一周日期(单选按钮) .

我仍然很困惑如何处理这个并且可能没有很好地描述事情 . 这是尝试设置一些示例:

场景#1:

  • (单选按钮)值=星期四
  • 当前日期= 2015年8月17日(星期一)
    -SendOnDate应该是:2015年8月20日(当前日期的星期四)

场景#2:

  • (单选按钮)值=星期一
  • 当前日期= 2015年8月19日(星期三)
    -SendOnDate应该是:2015年8月24日(当前日期的下周一周)

场景#3:

  • (单选按钮)值=星期三
  • 当前日期= 2015年8月19日(星期三)
    -SendOnDate应该是:2015年8月19日(当前日期的星期三)

我不确定如何最好地处理这个并设置我的SendOnDate值 .

1 回答

  • 1

    我认为你在周的方面让自己感到困惑;在今天提到的所有情况下或下面6天中的一个将匹配 .

    Private Function GetNextDay(dow As DayOfWeek) As DateTime
        Dim dtRet As DateTime = DateTime.Now
    
        ' one of today or next 6 days will match
        For n As Integer = 0 To 6
            dtRet = DateTime.Now.AddDays(n)
            If dtRet.DayOfWeek = dow Then
                Exit For
            End If
        Next
    
        Return dtRet
    End Function
    

    测试:

    Console.WriteLine("Today is {0}", DateTime.Now.ToShortDateString)
    Dim pickedDay = DayOfWeek.Sunday
    Console.WriteLine("For {0}, the schedule is {1}", pickedDay.ToString,
                      GetNextDay(pickedDay).ToShortDateString)
    
    pickedDay = DayOfWeek.Wednesday
    Console.WriteLine("For {0}, the schedule is {1}", pickedDay.ToString,
                      GetNextDay(pickedDay).ToShortDateString)
    
    pickedDay = DayOfWeek.Saturday
    Console.WriteLine("For {0}, the schedule is {1}", pickedDay.ToString,
                      GetNextDay(pickedDay).ToShortDateString)
    

    输出:

    今天是2015年8月23日星期日,时间表是8/23/2015星期三,时间表是8/26/2015星期六,时间表是8/29/2015

    第一个满足场景1,今天符合条件,其他2个只是选择 Date 匹配的 Date . 如果某些日子如假期不受限制,您必须 Build 一个列表,并在一天或一周内跳过 .

    注意: GetNextDay 返回 DateTime 变量,代码只是没有将其捕获到变量 .

相关问题