VBA: Sommerzeit

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: VBA: Sommerzeit
von: Christian
Geschrieben am: 17.04.2007 21:44:57

Hallo bestes Forum,
ich möchte in VBA ermitteln, ob ein Zeitstempel in diversen Logfiles in die deutsche Sommerzeit oder Winterzeit fällt (CET).
Der Zeitstempel im LogFile ist immer GMT (Greenwich Mean Time) - Im Winter sind wir (in Deutschland) ergo GMT+1, im Sommer GMT+2. Die Umstellung erfolgt am letzten Sonntag im März von Winterzeit auf Sommerzeit und am letzten Sonntag im Oktober von Sommerzeit auf Winterzeit.
Die Zeitstempel können entweder <Datum + Uhrzeit> oder nur <Datum> enthalten.
Bsp "nur Datum":
"24.03.2007" -> Winterzeit
"25.03.2007" -> Sommerzeit
Bsp "Datum + Uhrzeit":
"25.03.2007 00:59:00" -> Winterzeit
"25.03.2007 01:00:01" -> Sommerzeit
Ich suche also nach einer Function, die das Datum und optional die Uhrzeit als Eingabe "verträgt" und als Ergebnis "SummerTime = True" oder "SummerTime = False" ausgibt.
Wie kann man das in VBA umsetzen? Gibt es in VBA evt. schon eine Function à la "LocalTime"?
vielen Dank für eure Hilfe
Gruß Christian

Bild

Betrifft: AW: VBA: Sommerzeit
von: Andi
Geschrieben am: 17.04.2007 22:45:50
Hi,
hier nur mal ein paar Anregungen:
Mit
If Month(Range("A1")) = 3 And Day(Range("A1")) > 24 And Weekday(Range("A1")) = 1 Then
MsgBox "Umstellung auf Sommerzeit"
End If
kannst Du überprüfen, ob an einem bestimmten Datum auf Sommerzeit umgestellt wurde.
Analog kannst Du natürlich mit
If Month(Range("A1")) = 10 ...
auf Winterzeit prüfen.
An allen Tagen, auf die das nicht zutrifft, ist damit alles klar. Am den beiden 'Umstellungstagen' ist allerdings die Uhrzeit erforderlich, um zwischen Sommerzeit und Winterzeit zu unterscheiden. Umgestellt wird übrigens um 3 Uhr morgens, nicht wie in Deinem Beispiel um 1 Uhr.
Ein Problem gibt es noch, leider kenne ich die Struktur Deiner Daten nicht, und kann Dir deshalb keinen Tip geben, wie man das lösen könnte:
Bei der Umstellung von Sommer- auf Winterzeit wird die Uhr von 3:00 auf 2:00 zurückgedreht. Mit anderen Worten, am letzten Sonntag im Oktober wird die Stunde von 2:00 bis 3:00 zweimal durchlaufen, zuerst als Sommerzeit, dann als Winterzeit. Um welche der beiden Stunden es sich handelt, ist an dem einzelnen Zeitstempel nicht ablesbar. Wenn die Zeitstempel regelmäßig mindestens einmal pro Stunde vergeben werden, könnte man sich mit einem Vergleich mit dem vorhergehenden Stempel behelfen.
Schönen Gruß,
Andi

Bild

Betrifft: AW: VBA: Sommerzeit
von: Christian
Geschrieben am: 17.04.2007 23:10:34
Hallo Andi,
du hast natürlich Recht, was die Uhrzeit betrifft (Umstellung um 02:00:00 nach 03:00:00 bzw. umgkehrt), wenn man es auf CET (Central Europe Time), also unsere Zeit in Deutschland bezieht. Auf GMT (Greenwich Mean Time) bezogen, erfolgt die Umstellung jeweils um 01:00:00.
Unsere Sommerzeit ist GMT+2, unsere Winterzeit ist GMT+1.
Ich hab mit Hilfe des Archivs und eigenen Ansätzen schon mal folgendes zusammen gebastelt. (siehe Code). Ich hab allerdings Probleme, wie ich die optionale Angabe der Uhrzeit hier einbinden kann.
Vielleicht kannst du mir ja dabei helfen.
Vorab schon vielen Dank
Gruß
Christian


Function blnSummerTime(datDate As Date) As Boolean
   'Calculate Date of Summertime and Wintertime
   'Switch to Summertime: last Sunday of March at 01:00 (GMT)
   'Switch to Wintertime: last Sunday of October at 01:00 (GMT)
   
   Dim i as Integer, blnDate As Boolean
   
   If Month(datDate) < 3 Or Month(datDate) > 10 Then
      blnDate = False
   ElseIf Month(datDate) > 3 And Month(datDate) < 10 Then
      blnDate = True
   Else
      For i = 31 To 1 Step -1
         If Weekday(CDate(i & "." & Month(datDate) & "." & Year(datDate)), 1) = 1 Then Exit For
      Next
      Select Case Month(datDate)
         Case 3: If Day(datDate) >= i Then blnDate = True
         Case 10: If Day(datDate) < i Then blnDate = True
      End Select
   End If
   blnSummerTime = blnDate
End Function



Sub GetCET()
   MsgBox "24.03.2007 " & blnSummerTime("24.03.2007")    'ergibt False -> richtig
   MsgBox "25.03.2007 " & blnSummerTime("25.03.2007")    'ergibt True  -> richtig
   'MsgBox "25.03.2007 00:59:59 " & blnSummerTime("25.03.2007 00:59:59")   'läuft noch nicht, mü _
sste False ergeben
   'MsgBox "25.03.2007 00:01:00 " & blnSummerTime("25.03.2007 00:01:00")   'läuft noch nicht, mü _
sste True ergeben
End Sub



Bild

Betrifft: AW: VBA: Sommerzeit
von: Sigi
Geschrieben am: 18.04.2007 00:25:04
Hi Christian,
hilft dir diese VBA-Funktion?


Function IstSommerzeit(Datum As Date) As Boolean
Dim WiEnde As Date
Dim SoAnfang As Date
Dim SoEnde As Date
Dim WiAnfang As Date
    Application.Volatile
    WiEnde = DateSerial(Year(Datum), 4, 1) - _
                Weekday(DateSerial(Year(Datum), 4, 1), vbMonday) + TimeSerial(2, 0, 0)
    SoAnfang = DateSerial(Year(Datum), 4, 1) - _
                Weekday(DateSerial(Year(Datum), 4, 1), vbMonday) + TimeSerial(3, 0, 0)
    SoEnde = DateSerial(Year(Datum), 11, 1) - _
                Weekday(DateSerial(Year(Datum), 11, 1), vbMonday) + TimeSerial(2, 0, 0)
    WiAnfang = DateSerial(Year(Datum), 11, 1) - _
                Weekday(DateSerial(Year(Datum), 11, 1), vbMonday) + TimeSerial(3, 0, 0)
    If Datum < WiEnde Then
        IstSommerzeit = False
    ElseIf Datum >= WiEnde And Datum < SoAnfang Then
        IstSommerzeit = "#WERT!"    'nicht möglich
    ElseIf Datum >= SoAnfang And Datum < SoEnde Then
        IstSommerzeit = True
    ElseIf Datum >= SoEnde And Datum < WiAnfang Then
        IstSommerzeit = "#WERT!"    'beides möglich
    Else
        IstSommerzeit = False
    End If
End Function


Gruß
Sigi

Bild

Betrifft: AW: VBA: Sommerzeit
von: Gert Seler
Geschrieben am: 18.04.2007 08:23:17
Hallo Christian,
hier die Formeln :
Sommerzeit =DATUM(Jahr;4;)-WOCHENTAG(DATUM(JAHR;4;);1)+1
Winterzeit =DATUM(JAHR;11;)-WOCHENTAG(DATUM(JAHR;11;);1)+1
Jahr ist gleich 4stellige Jahreszahl (z.B. 2007)
mfg
Gert

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Prüfung ob Eingaben noch in eine Liste passen"