2013-10-21 61 views
1

爲什麼會發生以下情況?爲什麼tzinfo會在python中創建一個紀元時間?

from datetime import datetime 
import pytz 

d = pytz.utc.localize(datetime.utcnow()) 
print float(d.strftime('%s')) - float(d.replace(tzinfo=None).strftime('%s')) # 3600.0 

爲什麼關閉tzinfo時是否包含了tzinfo?我假設它與DST有關,但是... UTC沒有DST。

d.timetuple() 
# time.struct_time(tm_year=2013, tm_mon=10, tm_mday=21, tm_hour=17, tm_min=44, tm_sec=40, tm_wday=0, tm_yday=294, tm_isdst=0) 
d.replace(tzinfo=None).timetuple() 
# time.struct_time(tm_year=2013, tm_mon=10, tm_mday=21, tm_hour=17, tm_min=44, tm_sec=40, tm_wday=0, tm_yday=294, tm_isdst=-1) 

因此,所不同的是tm_isdst0-1。兩者都顯得非常「沒有DST-ish」。

只是不解決這個問題。

更新:

閱讀一些文檔(http://docs.python.org/2/library/time.html#time.mktime),因爲我原以爲這似乎mktime()輸出 「本地時間」 不UTC之後。其中一切都令人困惑。

+1

您的標題提到*「新紀元時間」*。此答案顯示[如何將datetime.date和datatime.datetime轉換爲POSIX時間戳](http://stackoverflow.com/a/8778548/4279) – jfs

回答

0

.strftime('%s') is not supported by Python。不要使用它。

在其工作的系統上,它將日期時間對象解釋爲本地時區中的時間,即datetime.now().strftime('%s')可能返回值接近time.time()

要了解UTC偏移或DST是否在給定本地時間的效果,你可以調用d.utcoffset()d.dst()其中d是pytz時區DateTime對象。

>>> import pytz 
>>> d = datetime.now(pytz.utc) 
>>> d.utcoffset() 
datetime.timedelta(0) 
>>> d.dst() 
datetime.timedelta(0) 

正如預期的那樣UTC偏移是UTC時區零並沒有DST轉換所以.dst()始終爲零全年。

相關問題