Как вы определяете переход на летнее время в VBA?
-
02-07-2019 - |
Вопрос
Какая функция сообщит нам, находится ли дата в VBA в 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(Год (новая дата), 11, 1, 1)
Весна:NDow (Год (новая дата), 3, 2, 1)
На текущую дату:
Вызовите функцию Windows API GetTimeZoneInformation, и она вернет перечисление (целое число) со статусом.
Я получил код для этого с замечательного сайта Чипа Пирсона в Excel.
Другие советы
Для тех, кому интересно, как учитывать летнее время в Европе (по центральноевропейскому времени), я изменил скрипт из Чип Пирсон.Последнее воскресенье марта (с 2 до 3 часов ночи) и октября (с 3 до 2 часов ночи) являются днями, когда происходит переключение часов.
Следующий код - это событие нажатия кнопки в 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
Необходимо найти модуль, содержащий необходимые методы здесь.