Domanda

Quale funzione ci farà sapere se una data in VBA è in ora legale o meno?

È stato utile?

Soluzione

Per le date non correnti (DST 2007+):

Innanzitutto, è necessaria una funzione per trovare il numero di giorni della settimana specifici in un mese:

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  

Quindi, è possibile verificare il giorno dell'ora legale rispetto alle seguenti chiamate di funzione:

Autunno: NDow (Anno (nuova data), 11, 1, 1)
  Primavera: NDow (Anno (nuova data), 3, 2, 1)

Per la data corrente:

Chiama la funzione API di Windows GetTimeZoneInformation, e restituirà un enum (intero) con lo stato.

Ho ottenuto il codice per questo dal fantastico sito Excel di Chip Pearson.

il sito di Pearson

Altri suggerimenti

Per chiunque si chiedesse come rendere conto dell'ora legale in Europa (ora dell'Europa centrale), ho modificato lo script da Chip Pearson . L'ultima domenica di marzo (dalle 2 alle 3 del mattino) e ottobre (dalle 3 alle 2 del mattino) sono i giorni in cui si verifica la commutazione dell'ora.

Il seguente codice è l'evento click di un pulsante in 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

Il modulo contenente i metodi necessari si trova qui .

Ulteriori informazioni sull'ora legale in Europa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top