web-dev-qa-db-ja.com

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
_

_replace.tzinfo=_呼び出しでtzinfoに割り当てることができるタイムゾーンnamesのリストに関するドキュメントが見つかりません。

私は以下を読みましたが、何もありません:

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

私もグーグルで検索しました。

Edit: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」であり、ESTではなくEDTです。私は助けに感謝します。ありがとうございました。

ドキュメントには以下が示されています。

現地時間での作業を主張する場合、このライブラリはそれらを明確に構築するための機能を提供します: 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は、ドキュメントで以前にeastern = timezone('US/Eastern')として定義されていました

これは、_is_dst= flag_が夏時間を指定するかどうかをさらに指定する必要があることを示しているようです。私の場合、これがうまくいかない理由について助けていただければ幸いです。

19
codingknob

標準ライブラリはタイムゾーンを定義していません-少なくとも良くありません( ドキュメント で与えられているおもちゃの例は ここで言及されている のような微妙な問題を扱いません)。事前定義されたタイムゾーンについては、サードパーティの 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
33
unutbu