excel - que - ¿Cómo se determina el horario de verano en VBA?
porque se lleva a cabo el cambio de horario (2)
¿Qué función nos permitirá saber si una fecha en VBA está en horario de verano o no?
Para fechas no actuales (DST 2007+):
Primero, necesita una función para encontrar la cantidad de días de la 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 versus las siguientes llamadas a funciones:
Caída: NDow (año (nueva fecha), 11, 1, 1)
Spring: 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 gran sitio de Excel de Chip Pearson.
Para cualquiera que se pregunte cómo tener en cuenta el horario de verano en Europa (hora de Europa central), modifiqué el guión de Chip Pearson . El último domingo de marzo (2 AM a 3 AM) y octubre (3 AM a 2 AM) son los días en que ocurre el cambio de hora.
El siguiente código es el evento click 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í .