2008-09-25 15 views

Répondre

5

Pour les dates non courants (DST) 2007+:

D'abord, vous avez besoin d'une fonction pour trouver le nombre de semaine spécifiques en un mois:

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 

Ensuite, vous pouvez vérifier pour la journée DST par rapport à la fonction suivante appelle:

automne: Ndow (Année (newdate), 11, 1, 1)
printemps: Ndow (Année (newdate), 3, 2, 1)

Pour la date actuelle:

Appelez la fonction API Windows GetTimeZoneInformation, et il retournera un ENUM (entier) avec le statut.

J'ai obtenu le code pour cela à partir de l'excellent site Excel de Chip Pearson.

Pearson's site

+2

Sauf que cela diffère par pays. –

4

Pour ceux qui se demandent comment tenir compte de l'heure d'été en Europe (heure d'Europe centrale), j'ai modifié le script de Chip Pearson. Le dernier dimanche de mars (de 2 h à 3 h) et d'octobre (de 3 h à 2 h) sont les jours où l'heure change.

code suivant est l'événement de clic d'un bouton dans 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 

Le module contenant les méthodes nécessaires se trouvent here.

More info on DST in Europe.