我想就这些代码的错误提供一些反馈。我试图根据周数输出整整一周。例如,如果我输入“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时。在这里假设某些事情让我失望是相当安全的。我只是无法理解它。我希望你对此有所了解。我应该把注意力集中在上面的代码中?
答案 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)天