Мы можем легко достичь того, что вы ищете, с datetime
:
>>> import datetime
>>> times = [ "08:00", "23:00" ]
>>> [datetime.datetime.strptime(time, "%H:%M").strftime("%I:%M %p") for time in times]
['08:00 AM', '11:00 PM']
Это читает ваш time
с strptime
, а затем выводит его с strftime
в понимании списка. Чтобы преобразовать это в EST
без перехода на летнее время (что составляет -05:00
), вы можете использовать pytz :
>>> import pytz
>>> [datetime.datetime.strptime(time, "%H:%M").replace(tzinfo=pytz.utc).astimezone(pytz.timezone('EST')).strftime("%I:%M %p") for time in times]
['03:00 AM', '06:00 PM']
, который сначала помечает время как utc
(replace(tzinfo=pytz.utc)
), а затем преобразует его в EST astimezone(pytz.timezone('EST'))
, а затем переформатирует в 12-часовое время.
Идя на шаг дальше к тому, что, я думаю, вы хотите, а именно к получению времени сегодня в EDT
(EST
с учетом datetime
), мы можем взять подсказку из [этого вопроса] [2]:
converted = []
tz = pytz.timezone('America/New_York')
for time in times:
time = datetime.datetime.strptime(time, "%H:%M").time()
converted.append(datetime.datetime.now(pytz.utc).replace(hour=time.hour, minute=time.minute).astimezone(tz).strftime("%I:%M %p"))
Что создаст то, что, я полагаю, вы ищете:
['04:00 AM', '07:00 PM']