このように、リクエストで任意の日時オブジェクトを受け取ったとしましょう。これは、可能なタイムゾーンから来ている可能性があります-どのタイムゾーンかわかりません。例として、東海岸から来たとします。
import pytz
from colander import iso8601
...
ests1 = iso8601.parse_date('2016-04-01T00:00:00.0000-04:00')
ests1 が入ってくるオブジェクトであるふりをします
pytz を使用すると、タイムゾーンについて少し知ることができます
etz = ests1.timetz() # 00:00:00-04:00
etzi = ests1.tzinfo # <FixedOffset '-04:00' datetime.timedelta(-1, 72000)>
etzn = ests1.tzname() # '-04:00' # EST
edst = ests1.dst() # '0:00:00'
ests1 の日付に関係なく、dst() は常に同じ値を返すように見えることに注意してください。
私はこのようなことをしたいと思います:
psts1 = pytz.timezone(etzn
).localize(dtime.datetime.fromtimestamp(ests1)
).astimezone(pytz.timezone('US/Pacific'))
しかし、それは結果として
UnknownTimeZoneError: '-04:00'
私もこれを試しました:
def convert_dt_to_pstz(dt):
pstoffset = -25200 # -7 * 60 * 60 - but what about DST? how do we tell which offset to use? -8 or -7
return dt.astimezone(tzoffset(None,pstoffset)) # convert to PST
しかし、それに関する問題は、日付を夏時間に合わせて調整する必要があるかどうかを判断する方法がわからないことです。
私もこれを試しました:
utc_date = ests1.astimezone(pytz.utc) # 2016-04-01T04:00:00+00:00
ptz = pytz.timezone('US/Pacific')
new_date = utc_date.replace(tzinfo=ptz) # 2016-04-01T04:00:00-07:53
しかし、new_date: -07:53 ?? の奇妙な結果を見てください。
「今」に対応する情報やサーバーの場所はどこにでもある可能性があるため、使用できないことに注意してください