Python: datetime tzinfo время именная документация

У меня есть дата, которую я создаю:

from datetime import datetime
from datetime import tzinfo
test = '2013-03-27 23:05'
test2 = datetime.strptime(test,'%Y-%m-%d %H:%M')
>>> test2
datetime.datetime(2013, 3, 27, 23, 5)

>>> test2.replace(tzinfo=EST)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'EST' is not defined

>> test2.replace(tzinfo=UTC)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'UTC' is not defined

Я не могу найти документацию в списке часового пояса names, которую я могу назначить tzinfo в вызове replace.tzinfo=.

Я прочитал следующее, и ничего нет:

http://docs.python.org/2/library/datetime.html#tzinfo-objects

Я также искал в google.

Изменить. Я выполнил решение, предоставленное unutbu, но я получаю следующее:

>>> test = '2013-03-27 00:05'
>>> test
'2013-03-27 00:05'

>>> test2 = dt.datetime.strp(test, '%Y-%m-%d %H:%M')
>>> test2
datetime.datetime(2013, 3, 27, 0, 5)

>>> est = pytz.timezone('US/Eastern')
>>> utc = pytz.utc
>>> print(est.localize(test2))
2013-03-27 00:05:00-04:00
>>> print(utc.localize(test2))
2013-03-27 00:05:00+00:00

>>> print(est.localize(test2,is_dst=False))
2013-03-27 00:05:00-04:00
>>> print(est.localize(test2,is_dst=True))
2013-03-27 00:05:00-04:00
>>>

Как вы можете видеть, даже когда я предоставляю флаг is_dst =, смещение все равно '-04: 00', которое равно EDT, а не EST. Я ценю помощь. Спасибо.

Документация показывает следующее:

Если вы настаиваете на работе с местными временами, эта библиотека предоставляет возможность для их построения однозначно: http://pytz.sourceforge.net/#problems-with-localtime

>>> loc_dt = datetime(2002, 10, 27, 1, 30, 00)
>>> est_dt = eastern.localize(loc_dt, is_dst=True)
>>> edt_dt = eastern.localize(loc_dt, is_dst=False)
>>> print(est_dt.strftime(fmt) + ' / ' + edt_dt.strftime(fmt))
2002-10-27 01:30:00 EDT-0400 / 2002-10-27 01:30:00 EST-0500

восток был определен ранее в документации как eastern = timezone('US/Eastern')

Это, по-видимому, указывает на то, что is_dst= flag следует дополнительно указать, указана ли дневная экономия света или нет. Я был бы признателен за помощь в том, почему это не работает в моем случае.

Ответы

Ответ 1

Стандартная библиотека не определяет никаких часовых поясов - по крайней мере, не очень хорошо (пример игрушки, приведенный в документации, не обрабатывает тонкие проблемы, такие как упомянутых здесь). Для предопределенных часовых поясов используйте сторонний модуль pytz.

import pytz
import datetime as DT

eastern = pytz.timezone('US/Eastern')
utc = pytz.utc
test = '2013-03-27 23:05'

Это "наивное" дата и время:

test2 = DT.datetime.strptime(test, '%Y-%m-%d %H:%M')   
print(test2)
# 2013-03-27 23:05:00

Это означает дату и время, относящиеся к часовому поясу, путем интерпретации test2, как если бы это было в часовом поясе EST:

print(eastern.localize(test2))
# 2013-03-27 23:05:00-04:00

Это означает дату и время, относящиеся к часовому поясу, путем интерпретации test2, как если бы это было в часовой пояс UTC:

print(utc.localize(test2))
# 2013-03-27 23:05:00+00:00

В качестве альтернативы вы можете преобразовать одно время, связанное с часовым поясом, в другой часовой пояс, используя метод astimezone:

test2_eastern = eastern.localize(test2)
print(test2_eastern.astimezone(utc))
# 2013-03-28 03:05:00+00:00