Abfrage ob zum Abfragezeitpunkt Normal- oder Sommerzeit vorherrscht

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Abfrage ob zum Abfragezeitpunkt Normal- oder Sommerzeit vorherrscht

      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.

      BASCOM-Quellcode

      1. '(
      2. ##############################################################################
      3. #
      4. # IsSummertime
      5. #
      6. # Gibt abhaengig von Datum (und Zeit) den Sommerzeit-Zustand zurueck
      7. #
      8. # HINWEIS:
      9. # Diese Funktion arbeitet nur korrekt wenn das Datum
      10. # zwischen 01.01.2000 und 31.12.2067 liegt da die Daten aus der
      11. # Funktion SysSec gewonnen werden.
      12. # Die Variable RTC_SysSec wird in einem Timer-IRQ jede Sekunde hochgezaehlt bzw.
      13. # beim auslesen oder beschreiben der RTC grundlegend gesetzt.
      14. #
      15. # Parameter:
      16. # pEnable =0 keine Abfrage (Rueckgabestatus immer =0 bzw. Normalzeit)
      17. # =1 Abfrage durchfuehren (Rueckgabestatus entsprechend NZ/SZ)
      18. #
      19. # Rueckgabe: Der Zeitstatus
      20. # 0= Normalzeit, 1= Sommerzeit
      21. #
      22. ##############################################################################
      23. ')
      24. Function IsSummertime(ByVal pEnable As Byte) As Byte
      25. Dim fSec As Byte
      26. Dim fMin As Byte
      27. Dim fHour As Byte
      28. Dim fDay As Byte
      29. Dim fMonth As Byte
      30. Dim fYear As Byte
      31. Dim fD As Byte
      32. Dim fM As Byte
      33. Dim fDh As Byte
      34. IsSummertime = 0
      35. If pEnable = 1 Then ' automatische SZ-Umschaltung
      36. fSec = Time(RTC_SysSec)
      37. fDay = Date(RTC_SysSec)
      38. fD = fDay
      39. fM = fMonth
      40. Select Case fM
      41. Case 1 To 2 ' Jan-Feb - NZ
      42. IsSummertime = 0
      43. Case 11 To 12 ' Nov-Dez - NZ
      44. IsSummertime = 0
      45. Case 4 To 9 ' Apr-Sep - SZ
      46. IsSummertime = 1
      47. Case 3 ' Mar - NZ-SZ?
      48. For fDay = 25 To 31
      49. fDh = DayOfWeek(fDay)
      50. If fDh = 6 Then ' Tag = Sonntag
      51. Exit For
      52. End If
      53. Next
      54. If fD < fDay Then ' noch NZ
      55. IsSummertime = 0
      56. Else ' ist schon SZ?
      57. If fD > fDay Then
      58. IsSummertime = 1
      59. Else
      60. If fD = fDay And fHour >= 2 Then
      61. IsSummertime = 1
      62. Else
      63. IsSummertime = 0
      64. End If
      65. End If
      66. End If
      67. Case 10 ' Okt ' SZ-NZ?
      68. For fDay = 25 To 31
      69. fDh = DayOfWeek(fDay)
      70. If fDh = 6 Then ' Tag = Sonntag
      71. Exit For
      72. End If
      73. Next
      74. If fD < fDay Then ' noch SZ
      75. IsSummertime = 1
      76. Else ' ist schon NZ?
      77. If fD > fDay Then
      78. IsSummertime = 0
      79. Else
      80. If fD = fDay And fHour >= 3 Then
      81. IsSummertime = 0
      82. Else
      83. IsSummertime = 1
      84. End If
      85. End If
      86. End If
      87. End Select
      88. End If
      89. End Function
      Alles anzeigen
    • Oder so :
      Zu finden unter Datumskram

      Quellcode

      1. '#########################################################################
      2. '# Auf Sommer- bzw. Winterzeit prüfen und ggf. das Datum stellen
      3. '# Check_dat= Datum und Uhrzeit zum Prüfen in Syssec. Wird ggf um 3600 Sekunden
      4. '# erhöht oder erniedrigt
      5. '# Workflag = 0 nur checken und Status anpassen,
      6. '# = 1 Checken, Status anpassen und Uhr stellen
      7. '#
      8. '# Status = 1 Sommerzeit
      9. '# = 0 Winterzeit
      10. '#########################################################################
      11. Sub Checksommerzeit(check_dat As Long , Byval Workflag As Byte , Status As Byte)
      12. Local D_sec As Byte
      13. Local D_min As Byte
      14. Local D_hour As Byte
      15. Local D_day As Byte
      16. Local D_month As Byte
      17. Local D_year As Byte
      18. Local Dayofdate As Byte ' Tag zu Datum
      19. Local Sz_flag As Byte
      20. Sz_flag = 0 ' Erst mal Winterzeit annehmen
      21. D_day = Date(check_dat) ' Syssec zerlegen weil Jahr gebraucht wird
      22. D_sec = 0 ' Was für ein Tag ist
      23. D_min = 0
      24. D_hour = 2
      25. D_day = 1 ' der 1.4. des Jahres
      26. D_month = 4
      27. Dayofdate = Dayofweek(d_day) ' 0 = Montag bis 6 = Sonntag
      28. D_day = 31 - Dayofdate ' Letzten Sonntag ermitteln
      29. D_month = 3 ' im März = Start Sommerzeit
      30. ' wenn Datum grösser ist, also Sommerzeit, checken auf Ende
      31. If Check_dat >= Syssec(d_sec) Then
      32. D_hour = 3 ' letzten Sonntag im Oktober
      33. D_day = 1
      34. D_month = 11
      35. Dayofdate = Dayofweek(d_day) '0 = Montag bis 6 = Sonntag
      36. D_day = 31 - Dayofdate ' Letzten Sonntag ermitteln
      37. D_month = 10 ' im Oktober
      38. If Check_dat < Syssec(d_sec) Then Sz_flag = 1 ' Ist immer noch in der Sommerzeit
      39. End If
      40. If Sz_flag = 0 Then ' Keine Sommerzeit
      41. If Status = 1 Then
      42. Status = 0
      43. If Workflag = 1 Then Check_dat = Check_dat - 3600
      44. End If
      45. Else ' Doch Sommerzeit
      46. If Status = 0 Then
      47. Status = 1
      48. If Workflag = 1 Then Check_dat = Check_dat + 3600
      49. End If
      50. End If
      51. End Sub
      Alles anzeigen