Как функция DateAdd в ASP Classic работает с опцией "ww" недель? - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно реплицировать функциональность в C # из старой классической кодовой базы asp.

Кажется, кодовая база предполагает, что год может иметь до 54 недель, и использует метод DateAdd с опцией "ww" для расчета«идентификатор недели» для категоризации некоторых файлов.

Вся найденная мною онлайн-документация, похоже, игнорирует этот вопрос, и прямое прочтение предполагает, что добавление недель - это то же самое, что и добавление (недель *7) дней, однако, я не хочу нарушать обратную совместимость.Я думаю, что старый код отключен на одну ошибку, но я не хочу предполагать это.В течение года могут быть дни в 54 разных неделях, но я не думаю, что когда-либо делать DateAdd со значением больше 52 имеет смысл.

Мой вопрос заключается в том, как

DateAdd("ww", x, date) 

работа?

Это эквивалент

date.AddDays(7 * x) 

в C #?

Существуют ли крайние случаи, когда первое января приходится на (например) субботу, и DateAdd ("ww", 53, date) может вернуть действительную дату в том же году?

1 Ответ

0 голосов
/ 29 ноября 2018

Я могу вам сказать, что 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) на неткасается несоответствия дат.

...