Pregunta

¿Qué función nos permitirá saber si una fecha en VBA está en horario de verano o no?

¿Fue útil?

Solución

Para fechas no actuales (DST 2007+):

Primero, necesita una función para encontrar el número de días de semana específicos en un mes:

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  

Luego, puede verificar el día del horario de verano en comparación con las siguientes llamadas a funciones:

Otoño: NDow (Año (nueva fecha), 11, 1, 1)
  Primavera: NDow (año (nueva fecha), 3, 2, 1)

Para la fecha actual:

Llame a la función API de Windows GetTimeZoneInformation, y devolverá una enumeración (entero) con el estado.

Obtuve el código para esto del excelente sitio Excel de Chip Pearson.

Sitio de Pearson

Otros consejos

Para cualquiera que se pregunte cómo contabilizar el horario de verano en Europa (hora de Europa central), modifiqué el script de Chip Pearson . El último domingo de marzo (de 2 a.m. a 3 a.m.) y octubre (de 3 a.m. a 2 a.m.) son los días en que se produce el cambio de hora.

El siguiente código es el evento de clic de un botón en 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

El módulo que contiene los métodos necesarios se encuentra aquí .

Más información sobre el horario de verano en Europa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top