出力をとと比較する際に問題がdateutil
ありpytz
ます。認識された日時オブジェクト(UTC)を作成してから、特定のタイムゾーンに変換していますが、異なる回答が得られます。夏時間の考慮に問題があるため、dateutilが間違った結果をもたらすことがあると思います(少なくとも、それについてのコメントを読みました)が、その問題の確認または修正を見つけることができません。これはコードです:
import dateutil
u = dateutil.tz.tzutc()
date1 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u)
# 2010-05-02 11:10:00+00:00
u2 = dateutil.tz.gettz('America/Chicago')
date2 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u2)
# 2010-05-02 11:10:00-05:00
import pytz
u = pytz.timezone('UTC')
date1 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u)
# 2010-05-02 11:10:00+00:00
u2 = pytz.timezone('America/Chicago')
date2 = datetime.datetime(2010, 5, 2, 11, 10, tzinfo=u2)
# 2010-05-02 11:10:00-06:00
では、ここで何が問題になるのでしょうか。
アップデート:
私はこれを試しました:
print u2.normalize(date1.astimezone(u2))
# 2010-05-02 06:10:00-05:00
では、pytzはnormalize
DSTを考慮する必要がありますか?
更新2:
pytzとdateutilはAmerica/Argentina / San_Luisの答えを出さないように見えましたが、これは機能します。
import pytz, dateutil, datetime
now = datetime.datetime.now()
for zone in pytz.all_timezones:
utc_dateutil = dateutil.tz.tzutc()
utcdate_dateutil = datetime.datetime(now.year, now.month, now.day, now.hour, now.minute, tzinfo=utc_dateutil)
zone_dateutil = dateutil.tz.gettz(zone)
newzone_dateutil = utcdate_dateutil.astimezone(zone_dateutil)
utc_pytz = pytz.timezone('UTC')
utcdate_pytz = datetime.datetime(now.year, now.month, now.day, now.hour, now.minute, tzinfo=utc_pytz)
zone_pytz = pytz.timezone(zone)
newzone_pytz = utcdate_pytz.astimezone(zone_pytz)
assert newzone_dateutil == newzone_pytz
私は何かが足りないのですか?
ありがとう