【问题标题】:VB.NET Compare dates, days, weeks to build new datetime variableVB.NET 比较日期、天、周以构建新的日期时间变量
【发布时间】:2015-08-24 05:47:15
【问题描述】:

语言:请使用 VB.NET 或 C#!

我正在尝试应用规则来确定特定日期并且惨遭失败。

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

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

  1. 如果当前日期是
  2. 如果当前日期是 > 所选日期,则使用下周日期作为所选日期(单选按钮)。

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

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

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

场景#3:
-(单选按钮)值 = 星期三
-当前日期 = 2015 年 8 月 19 日(星期三)
-SendOnDate 应该是:2015 年 8 月 19 日(当前日期所在周的星期三)

我不确定如何最好地解决这个问题并设置我的 SendOnDate 值。

【问题讨论】:

  • 在哪一周都没有关系,不是吗?在任何一种情况下,您都想选择下一个星期日或星期五或其他什么。只要它是未来的日期(明天+),那就是日期。
  • 星期几很重要!我需要根据上面应用的逻辑构建这个“SendOnDate”日期值。我可能解释得不是很好。如果当前日期的日期尚未出现在当前日期的周内,则将 SendOnDate 值构建为为本周选择的日期。如果当前日期的日期已经在一周中发生,则使用选择的下一周的日期。
  • 至少对于基本的 DateTime 类型,您无法告诉它在哪一周,因此您对这条规则感到困惑。在所有情况下,您都希望使用今天 (S#3) 或下一个选定日期的日期 (S#1,2)。一个 For N 循环通过今天和接下来的 6 天将找到下一个匹配日期(匹配时带有 Exit For)

标签: vb.net


【解决方案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 日
周日,时间表为 2015 年 8 月 23 日
星期三,时间表是 2015 年 8 月 26 日
星期六,时间表是 2015 年 8 月 29 日

第一个满足今天符合条件的场景 1,其他 2 个只是选择 DayOfWeek 匹配的即将到来的 Date。如果某些日子(如节假日)是禁区,您必须建立一个列表并提前一天或一周。

注意:GetNextDay 返回一个DateTime 变量,代码只是没有将它捕获到变量中。

【讨论】:

  • 啊啊啊啊……谢谢你给我看的东西。我会尽快实现这个!
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2012-01-20
相关资源
最近更新 更多