Tageswechsel erkennen

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
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

Hallo zusammen

ich auf der suche nach einer mod mit der ich einen Tageswechsel erkenne.
D.h. Das tool läuft normal--> pc geht in hyermode-->nächster Tag, den pc hochfahren und dann eine Aktion durchführen.
Was nicht auf Anhieb ging sind apscheduler, Datetime. Evtl. lags auch an mir.

Code: Alles auswählen

self.scheduler.add_job(self.check_daychanges, 'interval', minutes=1)

 def check_daychanges(self):
        print(datetime.datetime.now().strftime('%d.%m.%Y %H:%M:%S'))
        self._dm.check_daychanges(datetime.datetime.now().date())

def check_daychanges(self, _last_valid_powerstate_datetime=None):
     if _last_valid_powerstate_datetime == datetime.datetime.now().date():
       print('--same day--', _last_valid_powerstate_datetime, '---', datetime.datetime.now().date())
          self.zeitmerken = datetime.datetime.now().strftime('%d.%m.%Y %H:%M:%S')
      else:
          # not the same day since suspend
          print('new day','------')
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Du rufst check_daychanges mit _last_valid_powerstate_datetime = datetime.datetime.now().date() auf, und vergleichst diesen Wert mit datetime.datetime.now().date(). Wie kannst Du da erwarten, dass etwas anderes als True rauskommt?
Der _ deutet an, dass _last_valid_powerstate_datetime gar nicht genutzt wird, was ist verwirrend.
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

@Sirius3 hast recht, stand da wohl auf dem Schlauch, auch die Namensgebung ist nicht wirklich gut. Danke
Mir ist aber nicht klar, ob dies so der richtige Weg ist. Evtl. gibt es da grundsätzlich bessere Lösungen.
Im Netz bin ich noch auf "typing Callable" gestossen. Kennst du das Modul
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Loesung besteht darin, alle Aktionen sofort zu persistieren, also zB in einer Datenbank. Damit hast du dann deinen letzten Zeitstempel. Den Tagewechsel kann man zB einfach mit dem Wochentag bestimmen, wenn der unterschiedlich ist, muss es einen Wechsel gegeben haben.
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

ok, jetzt verstehe ich. Auch wenn ich "persistieren" im Duden nachschlagen musste. :-)

Vielen Dank
Antworten