获取当前星期的日期不能按预期工作



我想获取当前星期的日期(星期一至星期日)。

这是我当前的代码:

    Dim kw As Integer = DatePart(DateInterval.WeekOfYear, Now, , FirstWeekOfYear.FirstFourDays)
            If DatePart(DateInterval.Weekday, Now, Microsoft.VisualBasic.FirstDayOfWeek.Sunday) = 6 Then
                kw = kw + 1
            End If
            Dim CurrDateFirstDay As Date = DateAdd(DateInterval.Day, 1, ReturnDateForWeekNumber(kw))
            For i = 1 To 7

                strCurrDay = FormatDateTime(CurrDateFirstDay, DateFormat.LongDate)
........

我的问题是我的代码从16.01.2013开始,最后日期是下周22.01.2013星期四。为什么呢?为什么他在2013年1月16日星期三上班,而不是2013年1月14日星期一上班?为什么我得到的是下周的日期?我做错了什么?

编辑:

ReturnDateForWeekNumber:

Public Shared Function ReturnDateForWeekNumber(ByVal iWeek As Integer) As DateTime
    Return DateAdd(DateInterval.WeekOfYear, iWeek - 1, FirstDayOfYear)
End Function

我做错了什么?

您应该在调试器中逐步执行代码并观察结果,就像我所做的那样:

Dim kw As Integer = DatePart(DateInterval.WeekOfYear, Now, , FirstWeekOfYear.FirstFourDays)

返回当前周,即第3周。

If DatePart(DateInterval.Weekday, Now, Microsoft.VisualBasic.FirstDayOfWeek.Sunday) = 6 Then
    kw = kw + 1
End If

检查工作日是否为一周的第6天(星期五)。今天不是星期五,所以没有输入If条件

Dim CurrDateFirstDay As Date = DateAdd(DateInterval.Day, 1, ReturnDateForWeekNumber(kw))

这将在ReturnDateForWeekNumber的结果上增加一天,返回:

Return DateAdd(DateInterval.WeekOfYear, iWeek - 1, FirstDayOfYear)

这将在一年的第一天(1月1日)(星期二)上加上2(第3周减1)周。1月1日+ 2周= 1月15日

现在请记住,您在ReturnDateForWeekNumber中添加了一天,这就是为什么CurrDateFirstDay的值为1月16日。

编辑

我认为你的代码过于复杂,并且使用了很多遗留的VB6函数。我将这样做:

Dim myDate As Date = DateTime.Today
Dim dayDiff As Integer = myDate.DayOfWeek - DayOfWeek.Monday
Dim currentDay As Date = myDate.AddDays(-dayDiff) 'Monday
For i = 1 to 7
    Console.WriteLine(currentDay)
    'Do something with current day
    currentDay = currentDay.AddDays(1)
Next

您可能需要根据您的情况做一些调整,但我相信这种方法更简单,更不容易出错。

    Dim dateStartDateOfWeek As Date = GetWeekStartDate(52, 2014)
    Dim dateEndDateOfWeek As Date = DateAdd(DateInterval.Day, 7, dateStartDateOfWeek)
Private Function GetWeekStartDate(ByVal weekNumber As Integer, ByVal year As Integer) As Date
    Dim startDate As New DateTime(year, 1, 1)
    Dim weekDate As DateTime = DateAdd(DateInterval.WeekOfYear, weekNumber - 1, startDate)
    Return DateAdd(DateInterval.Day, (-weekDate.DayOfWeek) + 1, weekDate)
End Function

相关内容

  • 没有找到相关文章

最新更新