Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Sommerzeit

Forumthread: VBA: Sommerzeit

VBA: Sommerzeit
17.04.2007 21:44:00
Christian
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

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Sommerzeit
17.04.2007 22:45:50
Andi
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

Anzeige
AW: VBA: Sommerzeit
17.04.2007 23:10:34
Christian
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)  10 Then
blnDate = False
ElseIf Month(datDate) > 3 And Month(datDate) = i Then blnDate = True
Case 10: If Day(datDate) 



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


Anzeige
AW: VBA: Sommerzeit
18.04.2007 00:25:00
Sigi
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 And Datum = SoAnfang And Datum = SoEnde And Datum 


Gruß
Sigi

Anzeige
AW: VBA: Sommerzeit
18.04.2007 08:23:17
Gert
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
;
Anzeige

Infobox / Tutorial

VBA für die Sommerzeit in Excel


Schritt-für-Schritt-Anleitung

Um in VBA zu überprüfen, ob ein Zeitstempel in die deutsche Sommerzeit oder Winterzeit fällt, kannst du folgende Schritte befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf „VBAProject (DeineArbeitsmappe)“ > Einfügen > Modul.

  3. Code einfügen: Füge den folgenden Code in das neue Modul ein:

    Function blnSummerTime(datDate As Date) As Boolean
       Dim lastSundayInMarch As Date
       Dim lastSundayInOctober As Date
    
       lastSundayInMarch = DateSerial(Year(datDate), 3, 31) - Weekday(DateSerial(Year(datDate), 3, 31), vbSunday) + 1
       lastSundayInOctober = DateSerial(Year(datDate), 10, 31) - Weekday(DateSerial(Year(datDate), 10, 31), vbSunday) + 1
    
       If datDate >= lastSundayInMarch And datDate < lastSundayInOctober Then
           blnSummerTime = True
       Else
           blnSummerTime = False
       End If
    End Function
  4. Testen der Funktion: Verwende die Funktion in einer Subroutine oder direkt in einer Zelle, um das Ergebnis zu überprüfen:

    Sub TestSommerzeit()
       MsgBox "25.03.2007: " & blnSummerTime("25.03.2007") ' Sollte True zurückgeben
       MsgBox "24.10.2007: " & blnSummerTime("24.10.2007") ' Sollte False zurückgeben
    End Sub
  5. Die Funktion aufrufen: Führe die TestSommerzeit-Subroutine aus, um die Ergebnisse zu sehen.


Häufige Fehler und Lösungen

  • Fehler: Funktion gibt unerwartete Werte zurück
    Lösung: Stelle sicher, dass das Datum im richtigen Format vorliegt. Verwende dazu das Format MM.TT.JJJJ.

  • Fehler: Umstellung von Sommer- auf Winterzeit
    Bei der Umstellung am letzten Sonntag im Oktober ist es wichtig, die Uhrzeiten korrekt zu berücksichtigen. Hier kann eine zusätzliche Logik eingebaut werden, um die Uhrzeit zu prüfen.


Alternative Methoden

Eine alternative Methode zur Bestimmung der Sommerzeit in Excel ist die Verwendung von Excel-Formeln:

=UND(A1>=DATUM(JAHR(A1);3;31)-WOCHENTAG(DATUM(JAHR(A1);3;31);2)+1; A1<DATUM(JAHR(A1);10;31)-WOCHENTAG(DATUM(JAHR(A1);10;31);2)+1)

Diese Formel überprüft, ob das Datum in Zelle A1 in die Sommerzeit fällt.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung der Funktion:

Sub BeispielNutzung()
    MsgBox blnSummerTime("25.03.2023") ' Gibt True zurück
    MsgBox blnSummerTime("29.10.2023") ' Gibt False zurück
    MsgBox blnSummerTime("01.11.2023") ' Gibt False zurück
End Sub

Diese Subroutine zeigt, wie du die Funktion für verschiedene Daten nutzen kannst.


Tipps für Profis

  • UTC-Zeit umrechnen: Falls du mit UTC-Zeit arbeitest, kannst du die Umrechnung in lokale Zeit mit der Funktion DateAdd in VBA durchführen.

    Dim localTime As Date
    localTime = DateAdd("h", 2, utcTime) ' UTC + 2 Stunden für Sommerzeit
  • Automatisierung: Du kannst die Funktion in größeren Automatisierungsprozessen in Excel einbinden, um Zeitstempel automatisch zu analysieren.


FAQ: Häufige Fragen

1. Wie kann ich die Sommerzeit für verschiedene Jahre überprüfen?
Du kannst die Funktion blnSummerTime auf jedes Datum anwenden, um festzustellen, ob es in die Sommerzeit fällt, unabhängig vom Jahr.

2. Gibt es eine eingebaute Funktion in Excel für die Zeitumstellung?
Excel hat keine standardmäßige Funktion für die Sommerzeit, daher ist die Verwendung von VBA erforderlich, um diese Logik umzusetzen.

3. Wie gehe ich mit Zeitstempeln in GMT um?
Für Zeitstempel in GMT kannst du die Funktion blnSummerTime anpassen, indem du die Zeit um 1 oder 2 Stunden je nach Saison hinzufügst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige