Pergunta

Qual a função vai deixar-nos saber se uma data no VBA está em DST ou não?

Foi útil?

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.

site da Pearson

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 .

Mais informações sobre DST na Europa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top