傳遞pytz tzinfo對象fromtimestamp()
方法:
#!/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爲了比較 - 您可以按原樣使用它。
我不知道哪裏+06:55來自新加坡+08:00。
由於無效的.replace()
調用,您將看到+06:55
。 get_current_timezone()
返回pytz.timezone("Asia/Singapore")
,它具有可變的utc偏移量(它可能在不同的日期有不同的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.fromutc()
允許tz
爲給定的utc時間選擇正確的偏移量。
來源
2015-08-23 06:30:34
jfs
posix timestamp'1325376000'是''2012-01-01 00:00:00 UTC + 0000''和''2012-01-01 08:00:00 SGT + 0800''。爲什麼你覺得在新加坡它應該是'00:00:00'? – jfs