Mam fragment pytona kod, który wywołuje funkcję o godzinie 22:00.python3 datetime.timestamp w python2?
# Imports
from datetime import datetime, date, time, timedelta
import sched
import time as mod_time
# Find the next datetime corresponding to 22:00
first_run = datetime.combine(date.today(), time(22,0))
first_run = first_run if first_run > datetime.now() else first_run + timedelta(1)
# Dumb test function
def my_function():
print('my_function')
# Run the function at 22:00
scheduler = sched.scheduler(mod_time.time, mod_time.sleep)
scheduler.enterabs(first_run.timestamp(), 1, my_function,())
scheduler.run()
Kod ten jest obecnie pracuje w Pythonie . Chciałbym, aby działało w python . Mój jedyny problem wynika z następujących powodów:
first_run.timestamp()
Starałem się zastąpić go czymś takim:
(first_run - datetime(1970, 1, 1)).total_seconds()
Ale nie wydaje się być problem z mojej strefy czasowej (UTC byłoby zbyt łatwe, I” mw UTC + 2). Powinno być coś z tzinfo w first_run. Może powinienem coś dodać?
Jestem zagubiony i każda pomoc będzie doceniona. Wielkie dzięki za pomoc.
Edit1:
Po komentarzu Haochen Wu, czytałem Convert datetime to Unix timestamp and convert it back in python
Teraz wiem, że następujące linie są równoważne dla mnie:
(datetime.now() - datetime(1970, 1, 1)).total_seconds()
(datetime.now() - datetime.utcfromtimestamp(0)).total_seconds()
Roztwór powinien być
Ale tak nie jest. Ta wartość jest wciąż inna niż mod_time.time()
.
Może ze względu na zimę/lato?
Czytałaś to jedno: http://stackoverflow.com/questions/19801727/convert-datetime-to-unix-timestamp-and-convert-it-back-in- python –
Właśnie to przeczytałem. Teraz wiem, że '(datetime.now() - datetime (1970, 1, 1)). Total_seconds()' jest równoważne dla mnie do '(datetime.now() - datetime.utcfromtimestamp (0)). Total_seconds() '. Rozwiązaniem powinno być '(datetime.now() - datetime.fromtimestamp (0)). Total_seconds()'. Ale tak nie jest. Ta wartość nadal różni się od 'mod_time.time()'. Może ze względu na zimę/lato? – Niols
Moje najlepsze przypuszczenie jest takie, że musisz zaimplementować podklasę tzinfo i dodać ją do obiektu datetime. Zobacz dokumentację: https: //docs.python.org/2/library/datetime.html#tzinfo-objects –