ensz.py
python-script zum Berechnen der Schaltzeiten aus einem pascal-programm
ensz.py
— 3.3 KB
Dateiinhalt
#!/usr/bin/python3 import sys #print ('Number of arguments:', len(sys.argv), 'arguments.') #print ('Argument List:', str(sys.argv)) if len(sys.argv) >= 2: einaus = sys.argv[1] else: einaus = False # wir wollen deutsche tagesnamen in der ausgabe: # das setzt aber voraus, dass wir systemweit de.DE als locale installiert haben import locale locale.setlocale(locale.LC_ALL, '') import datetime import pytz tzberlin = pytz.timezone("Europe/Berlin") tzmet=pytz.timezone("Etc/GMT-1") heute=datetime.datetime.now() # als test beliebiges Datum: #heute=datetime.datetime(2022,1,4) # zeitzone berlin heute_berlin=tzberlin.localize(heute) heute_met = heute_berlin.astimezone(tzmet) if not einaus: print(heute_met.tzinfo,heute_berlin.tzinfo) print(heute_berlin,heute_met) # das pascal braucht eine zeichenkette als parameter: pasyear=str(heute.year) pasmonth=str(heute.month) ## startzeit ist heute 12:00 Uhr ENSZDATE=heute_met ## letzten Tag im aktuellen Monat berechnen lastday = ( datetime.date(ENSZDATE.year, 1 if ENSZDATE.month==12 else ENSZDATE.month+1, 1) - datetime.timedelta(days=1) ).day if not einaus: print(lastday) ## daten aus pascal programm einlesen, zeiten sind in MEZ nights=[] import subprocess enszproc = subprocess.Popen(['./ensz015a',pasyear,pasmonth],stdout=subprocess.PIPE) for line in enszproc.stdout: eintag=int(line[3:5]) austag=int(line[7:9]) ausstunde=int(line[65:67]) ausminute=int(line[68:70]) einstunde=int(line[59:61]) einminute=int(line[62:64]) nights.append([eintag,einstunde,einminute,austag,ausstunde,ausminute]) #print(nights) for day in range(0,lastday): # print(nights[day]) stunde_ein = nights[day][1] stunde_aus = nights[day][4] minute_ein = nights[day][2] minute_aus = nights[day][5] tag_ein = nights[day][0] tag_aus = nights[day][3] EIN=datetime.datetime(heute.year,heute.month,tag_ein,stunde_ein,minute_ein) if stunde_ein == 0 and minute_ein == 0: EIN = EIN + datetime.timedelta(days=1) elif stunde_ein < stunde_aus and stunde_ein < 12: EIN = EIN + datetime.timedelta(days=1) if day+1 == lastday: nextmonth = 1 if heute.month == 12 else heute.month + 1 nextyear = heute.year + 1 if nextmonth == 1 else heute.year AUS=datetime.datetime(nextyear,nextmonth,tag_aus,stunde_aus,minute_aus) else: AUS=datetime.datetime(heute.year,heute.month,tag_aus,stunde_aus,minute_aus) if stunde_aus > stunde_ein and stunde_ein > 16: AUS = AUS - datetime.timedelta(days=1) AUS_MET = tzmet.localize(AUS) EIN_MET = tzmet.localize(EIN) EIN_BERLIN = EIN_MET.astimezone(tzberlin) AUS_BERLIN = AUS_MET.astimezone(tzberlin) if einaus == 'einaus': if EIN_BERLIN > heute_berlin: print(EIN_BERLIN.strftime("EIN: %H:%M %Y-%m-%d,")) if AUS_BERLIN > heute_berlin: print(AUS_BERLIN.strftime("AUS: %H:%M %Y-%m-%d,")) else: print(EIN_BERLIN.strftime("EIN: %a %d. %B %H:%M"),AUS_BERLIN.strftime("AUS: %a %d. %B %H:%M")) """ import datetime import pytz d = datetime.datetime.now() timezone = pytz.timezone("America/Los_Angeles") d_aware = timezone.localize(d) d_aware.tzinfo > <DstTzInfo 'America/Los_Angeles' PST-1 day, 16:00:00 STD> import sys print ('Number of arguments:', len(sys.argv), 'arguments.') print ('Argument List:', str(sys.argv)) """