Python преобразование даты и времени в метки времени - PullRequest
0 голосов
/ 03 марта 2020

Я изо всех сил пытаюсь понять, почему следующие строки кода

from datetime import datetime 

t1 = datetime(2019, 3, 31, 0, 0, 0).timestamp()
t2 = datetime(2019, 4, 1, 0, 0, 0).timestamp()
dt = t2-t1
print(f"dt = {dt} seconds.")

выводят

dt = 82800.0 seconds.

вместо

dt = 86400.0 seconds.

Разница во времени между t2 и t1 ясно 1 день = 24 часа = 1440 минут = 86400 секунд. Почему это происходит?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

вызов, например, datetime(2019, 3, 31, 0, 0, 0).timestamp(), даст вам метку времени, локализованную в часовом поясе вашего компьютера, поскольку объект datetime не знает ни о каком часовом поясе («наивный»; см. документы ). По-видимому, вы находитесь в часовом поясе с изменением летнего времени на эту дату.

Если вы установите часовой пояс, например, в UT C (без перехода на летнее время), вы получите ожидаемый результат:

from datetime import datetime, timezone
t1 = datetime(2019, 3, 31, 0, 0, 0, tzinfo=timezone.utc).timestamp()
t2 = datetime(2019, 4, 1, 0, 0, 0, tzinfo=timezone.utc).timestamp()
dt = t2-t1

print(f"dt = {dt} seconds.")
# dt = 86400.0 seconds.
1 голос
/ 03 марта 2020

Это был день в вашем часовом поясе, когда часы изменились на один час вперед, потому что 82 000 - это 23 x 60 x 60

...