2010-10-15 62 views
0

我使用Python來跟蹤本地SQLite和遠程網頁之間的版本。通過來自HTTP響應的最後修改和文件大小信息比較它們是有用的。我在開發過程中發現了一些有趣的事爲什麼Python將我的默認時區設置爲-1?

def time_match(web,sql): 
    print web,sql 
    t1 = time.strptime(web,"%a, %d %b %Y %H:%M:%S %Z") 
    t2 = time.strptime(sql,"%Y-%m-%d %H:%M:%S") 
    print t1,t2 
    if t1==t2: 
    print "same time" 
    else: 
    print "different time" 
    return t1==t2 

在上面的代碼中,我試圖解碼從web和SQLite到內部時間的時間並進行比較。讓我們看看如下的打印屏幕:

Wed, 13 Oct 2010 01:13:26 GMT 2010-10-13 01:13:26 
(2010, 10, 13, 1, 13, 26, 2, 286, 0) (2010, 10, 13, 1, 13, 26, 2, 286, -1) 
different time 

結果顯示GMT已正確解碼,而Python的默認時區datetime看起來爲-1。我的系統時區實際上是+8,-1是從哪裏來的? SQLite的?

回答

1

位於time.struct_time對象最後位置的-1並不意味着您處於'UTC-01:00'。它代表未定義的屬性is_dst(因爲YYYY-MM-DD HH:MM:SS格式不包含有關當前時區或夏令時模式的任何信息)。

time.strptime('2010-10-15 11:01:02', '%Y-%m-%d %H:%M:%S') 
# returns the following on a computer with Central European Sommer Time (CEST, +02:00): 
time.struct_time(tm_year=2010, tm_mon=10, tm_mday=15, tm_hour=11, tm_min=1, tm_sec=2, tm_wday=4, tm_yday=288, tm_isdst=-1) 
+0

謝謝!由於SQLite datetime不支持時區,我必須在處理之前刪除TZ信息。 – 2010-10-17 00:32:53

+0

@ user369257 - 然後確保以UTC形式將任何日期時間存儲到您的數據庫中,並在您從數據庫讀取數據後立即添加utc tzinfo。這樣,您可以在沒有DST問題的數據庫中使用它。 – eumiro 2010-10-17 05:55:43

相關問題