У меня есть дата в следующем формате:
2019-12-13 20:18 EST или 2019-12-13 20:18 DSTили 2019-12-13 20:18 CST
Я хотел бы преобразовать их в unix timestamp.
Я использую модуль Pytz.
До сих пор я пытался использовать модуль datetime следующим образом:
time_est = '2019-12-13 20:18 EST'
datetime.datetime.strptime(time_est, '%Y-%m-%d %H:%M %z')
Это тоже не работает. Любые предложения там или советы будут оценены.






Аббревиатуры названий часовых поясов во многих случаях неоднозначны (одна аббревиатура для разных часовых поясов, см., например, здесь), поэтому лучше четко определить, что означают ваши сокращения. Вы можете сделать это, предоставив диктант сопоставления синтаксическому анализатору dateutil.
import dateutil
tzmapping = {'EST': dateutil.tz.gettz('America/New_York'),
'EDT': dateutil.tz.gettz('America/New_York'),
'CST': dateutil.tz.gettz('America/Chicago'),
'CDT': dateutil.tz.gettz('America/Chicago')
# add more if needed...}
time_eastern = '2019-12-13 20:18 EST'
dtobj = dateutil.parser.parse(time_eastern, tzinfos=tzmapping)
# datetime.datetime(2019, 12, 13, 20, 18, tzinfo=tzfile('US/Eastern'))
time_unix = dtobj.timestamp()
# 1576286280.0
Если вы должны использовать pytz, вам придется игнорировать EST в строке, анализировать наивную дату и время, локализовать соответствующий часовой пояс, а затем взять временную метку:
import datetime
import pytz
eastern = pytz.timezone('America/New_York')
dtobj = eastern.localize(datetime.datetime.strptime(time_eastern, '%Y-%m-%d %H:%M EST'))
time_unix = dtobj.timestamp()
# 1576286280.0
примечание:
%zпредназначен для анализа смещений UTC, например, например.'+00:00'будет преобразовано в UTC. есть также%Z, который будет анализировать очень специфические сокращения, см. документы. однако это а) зависит от платформы и б) фактически не устанавливает атрибут tzinfo результирующего объекта datetime.