3

pytz を使用して特定のタイム ゾーンでオブジェクトを作成すると、またはdatetimeを使用するかどうかによって、異なる UTC オフセットが得られます。datetime.datetime()datetime.datetime.now()

now()タイムゾーンの正しいUTCオフセットを提供しているようdatetime()ですが、認識できないオフセットを提供しています。

なぜ違うのですか?datetime()割り当てるオフセットの意味は何ですか?

これが私のコードです:

import datetime
import pytz

la_paz = pytz.timezone('America/La_Paz')

a = datetime.datetime.now(la_paz)
print a, a.utcoffset()

# 2011-03-22 05:30:13-04:00 -1 day, 20:00:00
# -4 hours is the correct UTC offset for La Paz

b = datetime.datetime(2011, 03, 22, 5, 30, tzinfo=la_paz)
print b, b.utcoffset()

# 2011-03-22 05:30:00-04:33 -1 day, 19:27:00
# What is the significance of -4:33?
4

2 に答える 2

2

ピッツのドキュメントから:

このライブラリは、ローカライズされた時間を構築する 2 つの方法のみをサポートしています。1 つ目は、pytz ライブラリによって提供される localize() メソッドを使用することです。これは、単純な日時 (タイムゾーン情報のない日時) をローカライズするために使用されます。

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
>>> print loc_dt.strftime(fmt)
2002-10-27 06:00:00 EST-0500

ローカライズされた時刻を作成する 2 番目の方法は、標準の astimezone() メソッドを使用して既存のローカライズされた時刻を変換することです。

>>> ams_dt = loc_dt.astimezone(amsterdam)
>>> ams_dt.strftime(fmt)
'2002-10-27 12:00:00 CET+0100'

または別の言い方をすると:

b = datetime.datetime(2011, 03, 22, 5, 30, tzinfo=la_paz)

ピッツではサポートされていません

于 2011-05-18T23:51:52.347 に答える
2

はデフォルトでその地域で最初に記録されたタイムゾーンを使用するようですdatetime()が、多くの場合 (ラパスのように) これは古く、もはや有効ではありません。

代わりに、日時をナイーブに作成してから、次のようにローカライズする必要があります。

b = la_paz.localize(datetime.datetime(2011, 03, 22, 5, 30))
print b, b.utcoffset()

now()自動的にローカライズを行うようです。

于 2011-03-22T10:21:28.863 に答える