Web アプリケーションでユーザーのさまざまなタイムゾーンを管理したくありませんが、どこから始めればよいかわかりません。各ユーザーの現地時間をデータベースに保存する必要がありますか? または、UTC 時間に変換して保存し、再度変換して表示する必要がありますか? または別の方法がありますか? たとえば、ユーザーの 1 人が現地時間で予定を立てた場合、それを UTC に変換してデータベースに保存し、必要なときに再度現地時間に変換して表示する必要があります。ちなみにDjangoを使っています。ありがとう。
4 に答える
日付/時刻を UTC として保存します (そのための Python コマンドが何であるかはわかりません)
日付を出力するときは、現在のユーザーのタイムゾーン設定を取得するヘルパー関数でそれらをラップし、オフセットの時刻/日付を調整してから、アプリケーションから出力します。
Django snippitUTCDateTimeフィールドを試してください。箱から出してすぐに必要なものがすべて揃っています。
UTC 時間に変換して保存し、再度変換して表示しますか?
はい、ローカル タイムゾーンが 1 つしかない場合でも、通常は日付を UTC タイムスタンプとしてデータベースに保存し、webapps の入力および出力段階で適切なタイムゾーンのテキストとの間で変換する必要があります。ユーザーごとのタイムゾーンが保存されている場合、カスタマイズされたタイムゾーンのデフォルトのタイムゾーンを簡単に切り替えることができます。
pytzは、タイムゾーンを選択して変換するための通常のソリューションです。(個人的には、あまり圧倒されない独自のタイムゾーンのコレクションをハックしました。)
単一の「データベース時間」タイムゾーンを使用することは、IMO では次の理由から最適なオプションです。
- 異なるタイムゾーンの人々に対処するためのルーチンを大幅に簡素化します
- 他のタイムゾーンへの変換が容易になります
- ユーザーのビューのコンテキスト外でデータを見ている人は誰でも、それが UTC であると想定でき、あるレコードの「12:45」が別のレコードの「12:45」であるかどうかを推測する必要はありません。
- 基準は良い
あ、はい。ユーザーのタイムゾーンをデータベースに保存し、すべての時間を共通の時間 (UTC など) で保存します。ユーザーが時間を含む何かを見たときにそれらを変換します。これは、すべてのユーザーが同じタイムゾーンにいるふりをすることを強制するだけではない、最も単純なソリューションです。