我必须从旧的ASP经典代码库中复制C#中的功能。
代码库似乎假设年份最多可以有54周,并使用带有“ ww”选项的DateAdd方法来找出“周ID”,以便对某些文件进行分类。
我发现的所有在线文档似乎都忽略了这个问题,直接阅读它表明增加周数与增加(weeks * 7)天相同,但是,我不想破坏向后兼容性。我认为旧代码有一个错误,但是我不想假设它。一年中可能有54个不同星期的日子,但我认为做一个大于52的值的DateAdd是没有道理的。
我的问题是
DateAdd("ww", x, date)
工作吗?
等于
date.AddDays(7 * x)
在C#中?
在某些情况下,一月的第一天(例如)是星期六,而DateAdd(“ ww”,53,date)可以返回同一年的有效日期吗?
答案 0 :(得分:2)
我可以告诉你DateAdd("ww", i, date)
等同于DateAdd("d", 7*i, date)
;因此,只要C#
和vbScript
中的两个函数具有相同的含义,它们必须等效。
为确保DateAdd("ww", i, date)
等同于DateAdd("d", 7*i, date)
,我使用了下面的脚本,它周期为2年,并且每天,如果以某种方式增加天数或增加周数不匹配,则周期为104周。错误。
date0 = Date()
For i = 0 to 2 * 365
date1 = DateAdd("d", i, date0)
For j = 0 to 2 * 53
date2 = DateAdd("d", j * 7, date1)
date3 = DateAdd("WW", j, date1)
assert = DateDiff("s", date2, date3)
If assert <> 0 Then
errMsg = _
"OPS addDays And addWeeks unmatched" &_
vbCrLf &_
CStr(date1) & vbTab &_
CStr(date2) & vbTab &_
CStr(date3) & vbTab &_
assert & vbTab
Call Err.Raise(vbObjectError + 10, "Test DateAdd(""ww"", i, date)", errMsg)
End If
Next
Next
所以我想您可以使用date.AddDays(7 * x)
替换DateAdd("ww", x, date)
,而不必担心日期不匹配。