Как вы определяете летнее время в VBA? - PullRequest
3 голосов
/ 25 сентября 2008

Какая функция сообщит нам, находится ли дата в VBA в летнее время или нет?

Ответы [ 2 ]

5 голосов
/ 25 сентября 2008

Для не текущих дат (DST 2007 +):

Во-первых, вам нужна функция для определения количества определенных дней недели в месяце:

Public Function NDow(Y As Integer, M As Integer, _
                N As Integer, DOW As Integer) As Date  

' Returns Date of Nth Day of the Week in Month  

NDow = DateSerial(Y, M, (8 - Weekday(DateSerial(Y, M, 1), _
              (DOW + 1) Mod 8)) + ((N - 1) * 7))  

End Function  

Затем вы можете проверить день перехода на летнее время в сравнении со следующими вызовами функций:

Падение: NDow (Год (newdate), 11, 1, 1)
Весна: NDow (Год (newdate), 3, 2, 1)

На текущую дату:

вызов функции Windows API GetTimeZoneInformation, и он вернет перечисление (целое число) со статусом.

Я получил код для этого с отличного сайта Чипа Пирсона в Excel.

Сайт Пирсона

4 голосов
/ 18 декабря 2015

Для тех, кто интересуется, как учесть переход на летнее время в Европе (время в Центральной Европе), я изменил сценарий с Chip Pearson . Последнее воскресенье марта (с 2:00 до 3:00) и октября (с 3:00 до 2:00) являются днями, когда происходит переключение часов.

Следующий код является событием нажатия кнопки в Excel:

Dim dates As String
dates = "A1:A20"

For Each c In Worksheets("Sheet1").Range(dates).Cells
    If (IsDateWithinDST(c.Value)) Then
        c.Value = DateAdd("h", 1, c.Value)
    End If
Next

Модуль, содержащий необходимые методы, можно найти здесь .

Подробнее о летнем времени в Европе.

...