Berechnung von Sommerzeit/Winterzeit in Micropython

Neulich wollt ich wo mal innerhalb eines (Micro)python-Scripts die aktuell politisch gültige Uhrzeit anzeigen, aka: Sommer- und Winterzeit berechnen. Auf der Suche nach ner Lösung bin ich im Micropython-Forum auf folgenden Schnipsel aus einem Posting von JumpZero gestoßen:

def cettime():
    year = time.localtime()[0]       #get current year
    HHMarch   = time.mktime((year,3 ,(31-(int(5*year/4+4))%7),1,0,0,0,0,0)) #Time of March change to CEST
    HHOctober = time.mktime((year,10,(31-(int(5*year/4+1))%7),1,0,0,0,0,0)) #Time of October change to CET
    now=time.time()
    if now < HHMarch :               # we are before last sunday of march
        cet=time.localtime(now+3600) # CET:  UTC+1H
    elif now < HHOctober :           # we are before last sunday of october
        cet=time.localtime(now+7200) # CEST: UTC+2H
    else:                            # we are after last sunday of october
        cet=time.localtime(now+3600) # CET:  UTC+1H
    return(cet)

Dit hat auch im März wunderbar geklappt. Wollt das nur mal kurz Teilen, Festhalten und hier Archivieren :) Die Mechanik dürfte beim Studieren schnell klar werden: Zunächst werden die beiden “Schalttermine” für das aktuell laufende Jahr bestimmt und denn geguckt ob “jetzt” vorm ersten, vorm oder nachm zweiten liegt und entsprechend für Mitteleuropa 1h, 2h, oder wieder doch nur 1h draufgeschlagen.

[Edit: Bitte sonst so beim “Datensammeln” auf Konsistenz im Zeitstrahl achten, also lieber einfach /keine/ Zeitumstellung vornehmen und vorzugsweise einfach innerhalb UTC bleiben. Hauptsache dranschreiben :)]

2 Likes