我有一個python應用程序發送電子郵件提醒給不同時區的用戶。開始時間設置爲給定日期和時間,並且提醒可以設置爲開始時間之前的某個分鐘數。爲什麼pytz偏移量不正確?
以前的開發商沒有考慮到用戶的時區,所以總是是基於服務器的時間發送提醒。
使用pytz documentation,我最初嘗試使用UTC的一切,雖然這在發展工作,提醒仍然關閉生產。起初,我認爲這是服務器上的NTP問題,但事實並非如此。
我想確認,開發和生產中確實表現不同,所以我創建了一個簡單的腳本兩者之間的測試:
server_time = datetime.datetime.utcnow()
print "Server Time:", server_time
user_timezone = pytz.timezone('America/Montevideo')
print "User Timezone:", user_timezone
user_offset = user_timezone.utcoffset(server_time)
print "Offset:", user_offset
user_datetime = server_time + user_offset
print "User Time:", user_datetime
結果發展(正確):
Server Time: 2011-09-07 16:53:00.711334
User Timezone: America/Montevideo
Offset: -1 day, 21:00:00
User Time: 2011-09-07 13:53:00.71133
生產結果(不正確):
Server Time: 2011-09-07 16:53:01.767143
User Timezone: America/Montevideo
Offset: -1 day, 20:15:00
User Time: 2011-09-07 13:08:01.767143
所以它看起來像pytz只是給錯誤的偏移量。請注意,如果我使用不同的時區,則無關緊要;我試過的每一個都給出了錯誤的偏移量。
至於在環境的差異,都是Ubuntu的盒子,但生產運行的Python 2.5.2和發展是2.6.2。
有沒有很多bugs reported for pytz,我還沒有找到任何我搜索的不同偏移量的原因。
因此,這是我的生產服務器上pytz數據有問題?一個pytz bug?或者我對pytz的理解有問題?我錯過了什麼?
您使用的是基於Debian的服務器?查看開發和生產服務器上的/ usr/share/zoneinfo/America/Montevideo之間的區別 –