Como você determina o horário de verão em VBA?
-
02-07-2019 - |
Pergunta
Qual a função vai deixar-nos saber se uma data no VBA está em DST ou não?
Solução
Para datas não circulante (DST 2007 +):
Em primeiro lugar, você precisa de uma função para encontrar o número de dias da semana específicos em um mês:
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
Em seguida, você pode verificar para o dia DST contra as chamadas de função a seguir:
Fall: NDow (Year (nova data), 11, 1, 1)
Mola: NDow (Ano (nova data), 3, 2, 1)
Para a data atual:
Chame a função GetTimeZoneInformation API do Windows, e ele irá retornar uma enumeração (inteiro) com o status.
Eu tenho o código para este a partir do site grande de Chip Pearson Excel.
Outras dicas
Para qualquer um querendo saber como conta para poupar tempo na Europa (central europa tempo) luz do dia, eu modifiquei o script de Chip Pearson . O último domingo de Março (duas horas - três horas) e outubro (3:00-02:00) são os dias em que a comutação hora ocorre.
Na sequência de código é o evento clique de um botão no 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
O módulo contendo os métodos necessários são para ser encontrados aqui .