2011-09-07 11 views
1

私は、異なるタイムゾーンでユーザーに電子メールリマインダを送信するpythonアプリケーションを持っています。開始時刻は、与えられた日時に設定され、アラームは開始時刻よりも数分前に設定されます。pytzオフセットが正しくないのはなぜですか?

以前の開発者は、ユーザーのタイムゾーンを考慮していなかったため、サーバーの時刻に基づいてリマインダが送信されていました。

pytz documentationを使用して、私は最初はすべてをUTCで試してみましたが、これは開発中に働いていましたが、リマインダはまだ生産中でした。最初は、これはサーバー上のNTPに問題があると仮定しましたが、そうではありませんでした。

私は確かに異なる動作をし、その開発と生産を確認したかったので、私は2つの間のテストのための簡単なスクリプト作成:

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の理解の問題?私は何が欠けていますか?

+0

Debianベースのサーバーを使用していますか?あなたの開発者とプロダクションサーバの/ usr/share/zoneinfo/America/Montevideoの相違点を見てください。 –

答えて

2

$ 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でpytzに2011バージョンを使用し、使用していることを確認してください

$ 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 2010用いて、少なくとも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

関連する問題