私は、異なるタイムゾーンでユーザーに電子メールリマインダを送信する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の理解の問題?私は何が欠けていますか?
Debianベースのサーバーを使用していますか?あなたの開発者とプロダクションサーバの/ usr/share/zoneinfo/America/Montevideoの相違点を見てください。 –