Скрытая Unix отметка времени в AOE - PullRequest
1 голос
/ 17 февраля 2020

Я пытаюсь преобразовать отметку времени Unix в время AoE. Я пробовал pytz, но кажется, что в pytz нет времени AoE. Есть ли способ, которым я могу это сделать?

tz = pytz.timezone('AOE')
timestamp_aoe = datetime.fromtimestamp(timestamp, tz).isoformat() 

1 Ответ

0 голосов
/ 18 февраля 2020

Часовой пояс AoE ( Везде на Земле ; UT C -12) не определен в часовых поясах pytz, ref. pytz.all_timezones (v2019.3).

Sidenote: datetime.fromtimestamp() принимает только один аргумент; позже вам нужно будет указать tzinfo полученного объекта datetime, используя, например, replace() или localize() (см. здесь для получения дополнительной информации).

Предложение, как справиться с вашей проблемой

Преобразование ваших временных меток в объекты UT C datetime. Поскольку AoE - UT C -12, и, насколько я могу судить, не имеет летнего времени, вы можете сделать

from datetime import datetime, timezone

ts = 1582013600.5 # timestamp from tz 'AoE', UTC-12

# add 43200 seconds to get a UTC timestamp
ts_utcoffset_s = 43200 # 12 h in [s]
# ...and convert to datetime object, adding UTC as tzinfo
dt = datetime.utcfromtimestamp(ts + ts_utcoffset_s).replace(tzinfo=timezone.utc)

print(dt.isoformat())
# 2020-02-18T20:13:20.500000+00:00

Поскольку часовой пояс AoE недоступен в pytz, вы не сможете создавать datetime объекты с учетом часового пояса с tzinfo = AoE. Все, что вы можете получить, это наивные datetime объекты, которые содержат время AoE, но не знают об этом. Я не рекомендовал бы работать с этим, так как это может привести к путанице. Лучше придерживайтесь UT C, когда можете.

...