7

日付をローカル タイム スタンプから UTC に変換してから、ローカル タイム スタンプに戻す必要があります。

奇妙なことに、UTC からローカルに変換し直すと、python は元の PST ではなく PDT であると判断するため、変換後の日付が 1 時間増えます。誰かが私に何が起こっているのか、または私が間違っていることを説明できますか?

from datetime import datetime
from pytz import timezone
import pytz

DATE_FORMAT = '%Y-%m-%d %H:%M:%S %Z%z'

def print_formatted(dt):
    formatted_date = dt.strftime(DATE_FORMAT)
    print "%s :: %s" % (dt.tzinfo, formatted_date)


#convert the strings to date/time
date = datetime.now()
print_formatted(date)

#get the user's timezone from the pofile table
users_timezone = timezone("US/Pacific")

#set the parsed date's timezone
date = date.replace(tzinfo=users_timezone)
date = date.astimezone(users_timezone)
print_formatted(date)

#Create a UTC timezone
utc_timezone = timezone('UTC')
date = date.astimezone(utc_timezone)
print_formatted(date)

#Convert it back to the user's local timezone
date = date.astimezone(users_timezone)
print_formatted(date)

出力は次のとおりです。

None :: 2011-09-18 18:24:23 
US/Pacific :: 2011-09-18 18:24:23 PST-0800
UTC :: 2011-09-19 02:24:23 UTC+0000
US/Pacific :: 2011-09-18 19:24:23 PDT-0700
4

1 に答える 1

6

変化する

date = date.replace(tzinfo=users_timezone)

date = users_timezone.localize(date)

localize夏時間に合わせて調整しますが、調整しreplaceません。詳細については、ドキュメントを参照してください。

于 2011-09-19T00:19:19.387 に答える