周数输入返回疯狂的整周输出

时间:2014-11-03 18:40:08

标签: vb.net calendar

我想就这些代码的错误提供一些反馈。我试图根据周数输出整整一周。例如,如果我输入“2014/45”,我想输出从11月2日到11月8日的所有日期。现在我需要弄清楚那个星期的第一个日期(因此是11月2日),然后抓住剩下的日子,这就是一切都搞砸了。这就是我想出来的:

' getyear = 2014, getweek = 45
Dim DateOfFirstWeekDay As DateTime = GetDateOfFirstDayOfWeek(getyear, getweek)    
Dim FirstDateInSequence As DateTime = CDate(DateAdd("d", _
                        CInt(Abs(Integer.Parse(Weekday(DateOfFirstWeekDay, WeekStartsWith))) * -1) + 1, _
                        DateOfFirstWeekDay)).ToShortDateString()

Protected Friend Shared Function GetDateOfFirstDayOfWeek(ByVal getyear As Nullable(Of Integer), _
                                                 ByVal getweek As Nullable(Of Integer)) As DateTime
    Dim firstWeekDay As DateTime = GetFirstDayOfWeek(newYearDay)

    If getweek = 1 Then
        getweek -= 1
    End If

    Return DateAdd(DateInterval.WeekOfYear, CInt(getweek), firstWeekDay)
End Function

Protected Friend Shared Function GetFirstDayOfWeek(ByVal dt As DateTime) As DateTime
    If dt.DayOfWeek = DayOfWeek.Sunday Then
        Return dt.AddDays(-6)
    Else
        Return dt.AddDays(1 - CInt(dt.DayOfWeek))
    End If
End Function

正如我的问题暗示11月2日不是我得到的结果。相反,FirstDateInSequence返回2013年12月22日,当我输入2014/45时。在这里假设某些事情让我失望是相当安全的。我只是无法理解它。我希望你对此有所了解。我应该把注意力集中在上面的代码中?

1 个答案:

答案 0 :(得分:0)

我很难快速关注您的代码逻辑。所以这是我的。

您可以从找到当年第一周的第一天开始

    Dim d As New DateTime(year, 1, 1)

    d = d.AddDays(-d.DayOfWeek)

然后添加天数(weeknumber -1)* 7

    d = d.AddDays((week_number - 1) * 7)

我做-1,因为我假设week_number将等于1来获得第一周。由于d已经等于第一周,我们从0开始计数。

要获得最后一天,只需在结果中添加6(或7)天