fromtimestamp()
メソッドにオブジェクトtzinfoのpytzを渡し:
#!/usr/bin/env python
from datetime import datetime
import pytz # $ pip install pytz
tz = pytz.timezone("Asia/Singapore")
print(datetime.fromtimestamp(1325376000, tz))
# -> 2012-01-01 08:00:00+08:00
注:結果オブジェクトはタイムゾーンに対応しており:あなたはすなわち、他の意識DateTimeオブジェクトとそれを比較することができ、あなたはUTCに変換する必要はありません。比較のためにそのまま使用することができます。
シンガポールが+08:00のときに+06:55が来る場所はわかりません。
.replace()
コールが無効であるため、+06:55
が表示されます。 get_current_timezone()
は、可変utcオフセットを持つpytz.timezone("Asia/Singapore")
を返します(異なる日付で異なるutcオフセットを持つ可能性があります)。 .replace()
をいくつかランダムに(実装に依存して)呼び出すと、tzinfoオブジェクトが使用されます。問題は.replace()
メソッドはpytz.timezone("Asia/Singapore")
が入力日付の正しいtzinfoを選択できないということです。
>>> list(tz._tzinfos.values())
[<DstTzInfo 'Asia/Singapore' MALT+7:00:00 STD>,
<DstTzInfo 'Asia/Singapore' MALT+7:20:00 STD>,
<DstTzInfo 'Asia/Singapore' JST+9:00:00 STD>,
<DstTzInfo 'Asia/Singapore' SMT+6:55:00 STD>,
<DstTzInfo 'Asia/Singapore' SGT+7:30:00 STD>,
<DstTzInfo 'Asia/Singapore' MALT+7:30:00 STD>,
<DstTzInfo 'Asia/Singapore' MALST+7:20:00 DST>,
<DstTzInfo 'Asia/Singapore' LMT+6:55:00 STD>,
<DstTzInfo 'Asia/Singapore' SGT+8:00:00 STD>]
即ち、+06:55
と+0800
両方がシンガポールの(異なった日に)有効です。そのため、.replace()
はutcタイムゾーン自体(オフセットはゼロ、任意の日付では常に)のような一定のutcオフセットを持つタイムゾーンでのみ使用する必要があります。
fromtimestamp(,tz)
メソッドは、tz
が指定されたutc時間に対して正しいオフセットを選択できるように、内部的にtz.fromutc()
を呼び出します。
出典
2015-08-23 06:30:34
jfs
posixタイムスタンプ '1325376000'は' '2012-01-01 00:00:00 UTC + 0000''と' '2012-01-01 08:00:00 SGT + 0800''です。シンガポールではなぜそれが00:00:00でなければならないと思いますか? – jfs