Hallo zusammen,
für meine Heizungssteuerung muß ich Zeitberechnungen durchführen und brauche da mal Hilfe.
Es soll geprüft werden, ob die Zeit beim Scriptaufruf innerhalb einer vorgegebenen Zeit (Schaltzeit) liegt. Also ist "jetzt" innerhalb von
Montag 05:00 bis 22:00
..
Samstag 06:00 bis 23:00
Derzeit habe ich die Zeiten in einer Mysql-DB und mache die Abfrage dort. Ich will aber weg von der DB, die Zeiten könnten in einer separaten config ausgelagert werden.
Brauche da mal einen Anstupser wie man das lösen kann.
Gruß
Bernd
Zeitberechnung
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
im einfachsten Fall legst du die einfach eine Datei an, z.B. time_config.py, und hinterlegst darin die Zeiten. Ob als String, Liste, Dict oder wie auch immer hängt dann davon ab, wie die erlaubten Zeiten aussehen.
Im Hauptprogramm importierst du die Datei dann und greifst auf die Werte zu.
Alternative kannst du dir auch eine .ini-Datei anlegen und darauf mit configparser Modul zugreifen.
Gruß, noisefloor
im einfachsten Fall legst du die einfach eine Datei an, z.B. time_config.py, und hinterlegst darin die Zeiten. Ob als String, Liste, Dict oder wie auch immer hängt dann davon ab, wie die erlaubten Zeiten aussehen.
Im Hauptprogramm importierst du die Datei dann und greifst auf die Werte zu.
Alternative kannst du dir auch eine .ini-Datei anlegen und darauf mit configparser Modul zugreifen.
Gruß, noisefloor
Das ist ein klassischer datetime Fall...
Damit legst Du für jeden Zeitraum, den Du überprüfen möchtest, ein ``TimeRange`` Objekt an und prüfst mit dessen ``intersection`` Methode, ob sich ein anderes ``TimeRange`` Objekt darin befindet:
mutetella
Code: Alles auswählen
import datetime
class TimeRange(object):
def __init__(self, weekday, begin, end=None):
self.weekday = weekday
self.begin = begin
self.end = end or begin
def intersection(self, other):
return (
self.weekday == other.weekday and
self.begin <= other.begin and
self.end >= other.end
)
Code: Alles auswählen
>>> import datetime
>>> valid_time = TimeRange(0, datetime.time(5, 0), datetime.time(22, 0))
>>> valid_time.intersection(TimeRange(0, datetime.time(5, 0), datetime.time(22, 0)))
True
>>> valid_time.intersection(TimeRange(0, datetime.time(5, 0), datetime.time(22, 1)))
False
>>> valid_time.intersection(TimeRange(0, datetime.time(4, 59), datetime.time(22, 0)))
False
>>> valid_time.intersection(TimeRange(0, datetime.time(8, 0)))
True
>>> valid_time.intersection(TimeRange(1, datetime.time(8, 0)))
False
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )
@Sirius3
Stimmt. Für ``intersection`` müsste das zweite ``and`` ein ``or`` sein, oder?
mutetella
Stimmt. Für ``intersection`` müsste das zweite ``and`` ein ``or`` sein, oder?
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit )