2011-09-07 94 views
1

我有一個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的理解有問題?我錯過了什麼?

+0

您使用的是基於Debian的服務器?查看開發和生產服務器上的/ usr/share/zoneinfo/America/Montevideo之間的區別 –

回答

2

使用pytz 2010版

$ python test.py 
Server Time: 2011-09-16 00:20:49.479426 
User Timezone: America/Montevideo 
**Offset: -1 day, 20:15:00** wrong! 
User Time: 2011-09-15 20:35:49.479426-03:00 

使用pytz 2011版本

$ python test.py 
Server Time: 2011-09-16 00:36:54.764812 
User Timezone: America/Montevideo 
**Offset: -1 day, 21:00:00** great! 
User Time: 2011-09-15 21:36:54.764812 

看那pytz.VERSION,並確保您使用的至少2011h

>>> import pytz 
>>> pytz.VERSION 
'2011h' 

如果你有2010年,刪除並更換:

>>> pytz.__file__ 
/usr/lib/python2.6/dist-packages/pytz/__init__.pyc 

$ sudo rm -r /usr/lib/python2.6/dist-packages/pytz* 
$ sudo pip install pytz == 2011h 
+0

好的工作。偏移量現在是正確的。生產版本是2009a。服務器沒有pip,雖然easy_install抱怨「== 2011h」,但確實安裝了該軟件包。我曾嘗試升級pytz,但我手動,而不是使用easy_install。很明顯,最新版本的pytz不適用於python 2.5,我沒有意識到我只需要更新就可以刪除舊版本,並讓easy_install爲我的python版本提供最新的可用軟件包。再次,好的工作。謝謝!現在回到集成... – bogeymin

相關問題