Вечная формула календаря - PullRequest
0 голосов
/ 06 января 2012

Я рассчитываю разработать функцию, которая будет принимать данный год и возвращать либо предыдущий, либо следующий N-й повторно используемый календарный год.

ReuseCalendar (y, direction, n)

где: у - год направление либо -1 для предыдущего или 1 для следующего n - это n-й год, который вы хотите вернуть. (т.е.: 1-й раз 2011 год может быть повторно использован)

Я рассмотрел циклический просмотр каждого года в нужном направлении и проверял его до тех пор, пока не найду N-й год, который имеет статус скачкообразного / неисключительного и начинается в день недели. Но этот подход требует дополнительной обработки операций.

Если бы я нашел, скажем, 9-й год, который совпадает с 2011 годом. Это 2095 год. Мне нужно будет выполнить 84 оператора If (2095-2011), чтобы получить результат.

Я бы предпочел выполнить 9 вычислений, чтобы найти каждый последующий календарь до 2095 года. например: 2011> 2022> 2033> 2039> 2050> 2061> 2067> 2078> 2089> 2095

У меня есть общее представление о том, как это можно рассчитать, например:

If the year is a leap year, it can be reused after 28 years. 
If the year is the 1st year after a leap year, it can be reused after 6 years.  
If the year is the 2nd year after a leap year, it can be reused after 11 years.
If the year is the 3rd year after a leap year, it can be reused after 11 years.

Но это не всегда так, особенно когда речь идет об изменениях в новых веках, когда предполагалось, что это будет йатом, который можно использовать повторно.

Я создал некоторые функции, но они еще не почти завершены:

    Select Case y Mod 4
        Case 0
Return 28   
        Case 1
            If direction = 1 Then
                Return 6
            Else
                Return 11
            End If
        Case 2
            Return 11
        Case 3
            If direction = 1 Then
                Return 6
            Else
                Return 11
            End If
    End Select
End Function

Есть ли дополнительные функции, которые могут быть добавлены для улучшения функции. Будем очень благодарны любой помощи. Благодарю.

...