Anbei ein Code-Schnipsel mit dem ermittelt werden kann ob zum Abfragezeitpunkt Normal- oder Sommerzeit vorherrscht.
Die Funktion ermittelt aus der Systemsekunde das aktuelle Datum und die aktuelle Zeit.
Mit dem Ergebnis kann dann im eigenen Code die Systemsekunde entsprechend angepasst werden.
Ich verwende diese Funktion vor allem in Anwendungen wo es notwendig ist, zum Zeitpunkt der Aktivierung der Hardware den Zeitstatus festzustellen.
Derartige Hardware besitzen immer eine RTC die immer mit der Normalzeit läuft.
Auf Grund des Ergebnisses dieser Funktion kann dann der Systemsekunde der Wert 3600 hinzugefügt werden wenn zum abgefragten Zeitpunkt Sommerzeit vorherrscht, um die wirklich aktuelle Zeit für weitere Berechnungen zu erhalten.
Alles anzeigen
Die Funktion ermittelt aus der Systemsekunde das aktuelle Datum und die aktuelle Zeit.
Mit dem Ergebnis kann dann im eigenen Code die Systemsekunde entsprechend angepasst werden.
Ich verwende diese Funktion vor allem in Anwendungen wo es notwendig ist, zum Zeitpunkt der Aktivierung der Hardware den Zeitstatus festzustellen.
Derartige Hardware besitzen immer eine RTC die immer mit der Normalzeit läuft.
Auf Grund des Ergebnisses dieser Funktion kann dann der Systemsekunde der Wert 3600 hinzugefügt werden wenn zum abgefragten Zeitpunkt Sommerzeit vorherrscht, um die wirklich aktuelle Zeit für weitere Berechnungen zu erhalten.
BASCOM-Quellcode
- '(
- ##############################################################################
- #
- # IsSummertime
- #
- # Gibt abhaengig von Datum (und Zeit) den Sommerzeit-Zustand zurueck
- #
- # HINWEIS:
- # Diese Funktion arbeitet nur korrekt wenn das Datum
- # zwischen 01.01.2000 und 31.12.2067 liegt da die Daten aus der
- # Funktion SysSec gewonnen werden.
- # Die Variable RTC_SysSec wird in einem Timer-IRQ jede Sekunde hochgezaehlt bzw.
- # beim auslesen oder beschreiben der RTC grundlegend gesetzt.
- #
- # Parameter:
- # pEnable =0 keine Abfrage (Rueckgabestatus immer =0 bzw. Normalzeit)
- # =1 Abfrage durchfuehren (Rueckgabestatus entsprechend NZ/SZ)
- #
- # Rueckgabe: Der Zeitstatus
- # 0= Normalzeit, 1= Sommerzeit
- #
- ##############################################################################
- ')
- Function IsSummertime(ByVal pEnable As Byte) As Byte
- Dim fSec As Byte
- Dim fMin As Byte
- Dim fHour As Byte
- Dim fDay As Byte
- Dim fMonth As Byte
- Dim fYear As Byte
- Dim fD As Byte
- Dim fM As Byte
- Dim fDh As Byte
- IsSummertime = 0
- If pEnable = 1 Then ' automatische SZ-Umschaltung
- fSec = Time(RTC_SysSec)
- fDay = Date(RTC_SysSec)
- fD = fDay
- fM = fMonth
- Select Case fM
- Case 1 To 2 ' Jan-Feb - NZ
- IsSummertime = 0
- Case 11 To 12 ' Nov-Dez - NZ
- IsSummertime = 0
- Case 4 To 9 ' Apr-Sep - SZ
- IsSummertime = 1
- Case 3 ' Mar - NZ-SZ?
- For fDay = 25 To 31
- fDh = DayOfWeek(fDay)
- If fDh = 6 Then ' Tag = Sonntag
- Exit For
- End If
- Next
- If fD < fDay Then ' noch NZ
- IsSummertime = 0
- Else ' ist schon SZ?
- If fD > fDay Then
- IsSummertime = 1
- Else
- If fD = fDay And fHour >= 2 Then
- IsSummertime = 1
- Else
- IsSummertime = 0
- End If
- End If
- End If
- Case 10 ' Okt ' SZ-NZ?
- For fDay = 25 To 31
- fDh = DayOfWeek(fDay)
- If fDh = 6 Then ' Tag = Sonntag
- Exit For
- End If
- Next
- If fD < fDay Then ' noch SZ
- IsSummertime = 1
- Else ' ist schon NZ?
- If fD > fDay Then
- IsSummertime = 0
- Else
- If fD = fDay And fHour >= 3 Then
- IsSummertime = 0
- Else
- IsSummertime = 1
- End If
- End If
- End If
- End Select
- End If
- End Function