Feiertage, Daten und Zeiten
Das Modul shtime stellt eine Reihe von Funktionen zur Verfügung, die es erlauben festzustellen ob ein Datum ein Feiertag ist (und welcher). Dazu muss die Verwendung von Feiertagen in /etc/holidays.yaml konfiguriert sein.
Weiterhin gibt es Funktionen, die den Umgang mit Datums- und Zeitangaben vereinfachen.
Wenn eine Funktion als Parameter ein Datum oder einen Datum/Zeit Wert erwartet, kann der Parameter in einer der folgenden Formate angegeben werden:
date Objekt - Wenn ein date Objekt an eine Funktion übergeben wird, welche ein datetime Objekt erwartet, wird als Uhrzeit 0 Uhr, 0 Minuten und 0 Sekunden angenommen
datetime Objekt - Wenn ein datetime Objekt an eine Funktion übergeben wird, welche ein date Objekt erwartet, wird die Zeitangabe ignoriert
string mit Datum in der Form „yyyy-mm-dd“, „yy-mm-dd“, „dd.mm.yyyy“, „dd.mm.yy“, „mm/dd/yy“ oder „mm/dd/yyyy“
string mit einer Datum/Zeit Angabe wie z.B. „dd.mm.yyyy hh:mm“ oder „dd.mm.yyyy hh:mm:ss“
Bemerkung
Diese Funktionen können außer in Logiken auch in eval Ausdrücken in Item Attributen verwendet werden.
Die Funktionen für Feiertags- und Wochenend-Handling sind folgende:
Funktion |
Erläuterung |
---|---|
shtime.is_holiday(date) |
Liefert True, falls das Datum ein Feiertag (gesetzlich oder benutzerdefiniert) ist |
shtime.is_public_holiday(date) |
Liefert True, falls das Datum ein gesetzlicher Feiertag ist |
shtime.holiday_name(date, as_list=False) |
Liefert den Namen des Feiertags, falls das Datum ein Feriertag ist. Wenn mehrere Feiertage auf das selbe Datum fallen, werden sie Komma- getrennt zurück geleifert. Falls as_list auf True gesetzt wird, ist das Ergebnis kein String, sondern eine Liste mit den Feiertagsnamen. |
shtime.holiday_list(year) |
Liefert eine Liste aller Feiertage für ein Jahr |
shtime.public_holiday_list(year) |
Liefert eine Liste aller gesetzlichen Feiertage für ein Jahr |
shtime.is_weekend(date) |
Liefert True, falls das Datum auf ein Wochenende (Sa, So) fällt |
shtime.add_custom_holiday(cust_date) |
Trägt benutzerdefinierte Feiertage ein, die den Bedingungen des übergebenen dict cust_date entsprechen. Das dict hat die selbe Struktur, wie in der Definition in /etc/holidays.yaml |
shtime.add_custom_holiday_range(from_date, to_date=None, holiday_name=‘ ‚) |
Markiert jeden Tag, beginnend mit fromdate bis inklusive to_date als Ferientag mit dem angegebenen Namen |
shtime.time_since(dt, resulttype) |
Liefert die Zeitdifferenz zwischen dem angegeben Zeitpunkt dt und jetzt. resulttype gibt an, ob das Ergebnis als str (s) , als float Minuten (m), Stunden (h), Tagen (+d*), als int Minuten (im), Stunden (ih), Tagen (+id*) oder als tuple (dhms) bzw. (ds) zurück gegeben werden soll. Falls nicht angegeben, wird s verwendet. |
shtime.time_until(dt, resulttype) |
Liefert die Zeitdifferenz zwischen jetzt und dem angegeben Zeitpunkt dt. resulttype ist analog zu time_since() zu verwenden. |
shtime.time_diff(dt1, dt2, resulttype) |
Liefert die Zeitdifferenz zwischen den beiden angegebenen Zeitpunkten dt1 und dt2. resulttype ist analog zu time_since() zu verwenden. |
shtime.beginning_of_week(week, year, offset) |
Liefert das Datum des ersten Tages der angegebenen Woche. Falls week oder year nicht angegeben werden, wird der jeweils aktuelle Wert verwendet. offset ermöglicht es, den Wochenstart einer früheren oder späteren Woche zu eruieren (default 0). |
shtime.beginning_of_month(month, year, offset) |
Liefert das Datum des ersten Tages des angegebenen Monats. Falls month oder year nicht angegeben werden, wird der jeweils aktuelle Wert verwendet. offset ermöglicht es, den Wochenstart eines früheren oder späteren Monats zu eruieren (default 0). |
shtime.beginning_of_year(year, offset) |
Liefert das Datum des ersten Tages des angegebenen Jahres. Falls year nicht angegeben wird, wird das aktuelle Jahr verwendet. offset ermöglicht es, den Jahresstart eines früheren oder späteren Jahrs zu eruieren (default 0). |
Die Funktionen für das Datums-Handling sind folgende:
Funktion |
Erläuterung |
---|---|
shtime.today(offset=0) |
Liefert das aktuelle Datum als date |
shtime.tomorrow() |
Liefert das Datum des folgenden Tages als date |
shtime.yesterday() |
Liefert das Datum des zurück liegenden Tages als date |
shtime.beginning_of_week(week=None, year=None, offset=0) |
Liefert das Datum des Montags der Woche als date |
shtime.beginning_of_month(month=None, year=None, offset=0) |
Liefert das Datum des 1. des angegebenen Monats als date |
shtime.beginning_of_year(year=None, offset=0) |
Liefert das Datum des 1. Januar des angegebenen Jahres als date |
shtime.current_year(offset=0) |
Liefert das aktuelle Jahr |
shtime.current_month(offset=0) |
Liefert den aktuellen Monat |
shtime.current_monthname(offset=0) |
Liefert den Namens des aktuellen Monats |
shtime.current_day(offset=0) |
Liefert den aktuellen Tag |
shtime.day_of_year(date=None, offset=0) |
Liefert als Ergebnis, der wievielte Tag im Jahr das angegebene Datum ist |
shtime.length_of_year(year=None, offset=0) |
Liefert die Anzahl Tage, die das angegebene Jahr hat |
shtime.length_of_month(month=None, year=None, offset=0) |
Liefert die Anzahl Tage, die der angegebene Monat im angegebenen Jahr hat |
shtime.calendar_week(date=None, offset=0) |
Liefert die Kalenderwoche (nach ISO), in der das angegebene Datum liegt |
shtime.weekday(date=None, offset=0) |
Liefert den Wochentag nach ISO (1=Montag - 7=Sonntag) für das angegebene Datum |
shtime.weekday_name(date=None, offset=0) |
Liefert den Namen des Wochentags für das angegebene Datum |
shtime.date_transform(date) |
Wandelt ein Datum welches als date, datetime oder string angegeben wurde, in ein Datum vom Typ date |
shtime.datetime_transform(date) |
Wandelt eine Datums/Zeitangabe welche als date, datetime oder string angegeben wurde, in ein eine Datums/Zeitangabe vom Typ datetime |
shtime.time_since(dt, resulttype=‘s‘) |
Liefert die vergangene Zeit von der angegeben Datums/Zeitangabe bis jetzt. Über den Parameter resulttype kann festgelegt warden, in welcher Form das Ergebnis zurück geliefert werden soll:
|
shtime.time_until(dt, resulttype=‘s‘) |
Liefert die vergehende Zeit von jetzt bis zur angegeben Datums/Zeitangabe. Der Parameter resulttype ist bei der Funktion shtime.time_since() beschrieben. |
shtime.time_diff(dt1, dt2, resulttype=‘s‘) |
Liefert die vergehende Zeit von jetzt bis zur angegeben Datums/Zeitangabe. Der Parameter resulttype ist bei der Funktion shtime.time_since() beschrieben. |
Bemerkung
Funktionen, die als Parameter ein date erwarten, können ohne diesen Parameter aufgerufen werden. Dann wird das aktuelle Datum verwendet.
Funktionen, die als Parameter ein year und/oder month erwarten, können ohne diesen Parameter aufgerufen werden. Dann wird eine Liste über alle vorberechneten Feiertage zurück geliefert.
Funktionen, die als Parameter ein offset erwarten, können ohne diesen Parameter aufgerufen werden. Der Standardwert ist 0. Offset ist ein positiver (für zukünftige Werte) oder negativer (für vergangene Werte) Integerwert. Beispiel: shtime.beginning_of_week(None, -2) würde das Startdatum der vorletzten Woche liefern. shtime.day_of_year(shtime.today(), 2) oder shtime.day_of_year(shtime.today(2)) den Tag innerhalb des aktuellen Jahres von übermorgen.
Tipp
Die Funktionen wie shtime.today() sind im Zusammenhang mit den Feiertags-Funktionen nützlich. Um z.B. festzustellen, ob der folgende Tag ein Feiertag ist, kann einfach shtime.is_holiday(shtime.tomorrow()) aufgerufen werden.
Die Funktionen für das Zeit-Handling sind folgende:
Funktion |
Erläuterung |
---|---|
shtime.now() |
Liefert die aktuelle Zeit, unter Berücksichtigung der Zeitzone |
shtime.tz() |
Liefert die aktuelle lokale Zeitzone |
shtime.tzname() |
Liefert den Namen der aktuellen lokalen Zeitzone (z.B. CET) |
shtime.utcnow() |
Liefert die aktuelle Zeit in GMT, also ohne Berücksichtigung der Zeitzone |
shtime.runtime() |
Liefert die Laufzeit von SmartHomeNG, seit SmartHomeNG das letzte mal gestartet wurde. |