Вопрос

Какая функция сообщит нам, находится ли дата в 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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top