¿Cómo se determina el horario de verano en VBA?
-
02-07-2019 - |
Pregunta
¿Qué función nos permitirá saber si una fecha en VBA está en horario de verano o no?
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.
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í .