質問

(私はPythonとGoogle App Engineを初めて使用します。質問が基本的なように思える場合はご容赦ください。)

Google App Engineアプリケーションで複数のユーザーのタイムゾーンを管理しようとしています。

ここに私の制約があります:

  1. ユーザーが入力に時間を入力すると、現地時間になります(必要に応じてDSTを含む)。
  2. ユーザーが時刻を入力しない場合、システムは現地時間で時刻を入力する必要があります(必要に応じてDSTを含む)。
  3. 日付と時刻をユーザーに表示するときは、現地時間(必要に応じてDSTを含む)でなければなりません

時間は内部的にtzinfoオブジェクトとともにUTCとして保存され、App EngineはUTC時間でモデルを保存することを理解しています。

以前は、ユーザーに設定でタイムゾーンを指定するように求めることで、これがすべて解決したと思っていました。次に、単純に設定をロードし、そのtzinfoをそのユーザーを参照するdatetimeオブジェクトに追加します。

ただし、最近の夏時間により中断されました。 tzinfoオブジェクトにdst()を正しく実装していなかったことがわかりました。私が理解しているように、DSTが現在オンになっているかどうかを判断する必要があります。オンになっている場合は、tzinfoの正しいオフセットを返します。

問題は、タイムゾーンの夏時間が現在かどうかを判断する方法がわからないことです。明らかな何かを見逃していますか?

役に立ちましたか?

解決

できれば、 python-dateutil パッケージをご覧になることをお勧めします。このパッケージには、DSTオフセット情報を含むすべてのタイムゾーン用に事前に構築されたtzオブジェクトがあります。 「ただ知る」方法はないと思うデータをサポートせずにDSTがオンであるかどうかは、ほとんどのタイムゾーン(または少なくともDSTをサポートするタイムゾーン)の日付駆動型であり、日付はローカルのカスタム、政治、およびあらゆる種類の方法によって異なります。

http://labix.org/python-dateutil

他のヒント

ここにいくつか問題があります。

ユーザーが時間を入力すると、ローカルタイムゾーンで入力されますが、どの時間帯であるかをどのように知るのですか?ヨーロッパ/ビリニュスまたはヨーロッパ/マドリード?それともオーストラリア/メルボルンですか?タイムゾーンがわからない場合、日付/時刻は「単純」になります。

適切かつ正確であると考えられる唯一のタイムゾーンデータベース(一定のフラックスの状態を考慮)は、Pythonでは pytz パッケージ。タイムゾーン間で日付/時刻を簡単に変換できます:最初にユーザーから日付/時刻とタイムゾーンを取得し、ユーザーのタイムゾーンで日付/時刻をローカライズしてから、データベースに保存する準備ができているutcとして取得します。表示は別の方法です:データベースから日付/時刻を取得し、utcでローカライズしてから、ユーザーのタイムゾーンとして表示します。

最後に、自動DST変換などはありません。あいまいな日付/時刻の場合、時間を入力するタイムゾーンを事前に知る必要があります。それが人間の現実です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top