Zeitberechnung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
berndhs
User
Beiträge: 1
Registriert: Mittwoch 31. Dezember 2014, 09:55

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
Benutzeravatar
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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Wo liegt denn genau dein Problem?
Das Leben ist wie ein Tennisball.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Das ist ein klassischer datetime Fall... ;-)

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
        )
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:

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
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

@mutetella: die intersection-Methode ist wohl eher ein contains.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Sirius3
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 ;-) )
Antworten