私は、単一のタイムゾーンでのみ使用されるシステムで作業していますが、utcで日付と時刻を公開する他のシステムと統合しているので、方法だけでなく。私たちはまた、あなたの時間を記憶することがとにかく行く方法であることを以前から聞いたので、トラブルを最小限に抑える最も簡単な道のように感じました。最近、私たちはいくつかの問題に遭遇しました。我々はユーザーに価値のあるイベントをシステムに記録しているので、ユーザーにそれらを検索させて表示させます。スウェーデンは+1タイムゾーンにあるので、現地時間09:00のイベントは0800 utc時間として保存されます。ユーザーにイベントを表示すると、夏時間が迫ってから最近まで現地時間に戻すことができます。0800 utcを現地時間に翻訳すると2時間が追加されます。ログに記録されたイベントは、10時に起きたようです。私はこれをどのように扱うべきですか?この場合、保存された時間がdbに実際に保存された時間と同じ時間である場合、dstがその特定の時刻にオンまたはオフになったかどうかに応じて、日付を見て調整することができます。しかし、私はこれには汎用的な解決策が必要だと思う。なぜなら、将来、過去の時点を表す必要があるシステム内のさまざまな場所(他の場所)にタイムスタンプが作成されるからです。私には2つのオプションがあるように見えます。 1.ローカル時刻を保存することに戻り、utcを使用する他のシステムと統合するときに余分な作業をするか、または2.それぞれのutcタイムスタンプストアとともに、dst中にタイムスタンプが作成されたかどうかを示すデータを格納します。私が間違っている?右?行方不明?過去と未来のイベントのUTCとDST
答えて
getTimezoneOffset
メソッドを使用すると、クライアントのタイムゾーンオフセットをいつでも取得できます。今すぐ残っているのは、このタイムゾーンオフセットをデータベースに保存されているUTCの日付に適用し、エンドユーザに正しい日付を表示することです。一方、イベントがデータベースに記録されたときにユーザーが使用したタイムゾーンオフセットを表示する必要がある場合は、このオフセットを記録するためにDBに追加の列があります。複数のタイムゾーンを処理する場合、スウェーデンのユーザーが提出したインドのユーザーにレコードを表示するとどうなりますか?
この方法には注意してください。 'getTimezoneOffset'への呼び出しは、特定のUTCの日付と時刻に対して行わなければなりません。 'new Date()。getTimezoneOffset()'を呼び出して結果を任意の値に適用するのはあまり一般的ではありません。これは問題の時間とはかなり異なるかもしれない*現在のオフセットです。 –
あなたが欠けている主なことは、スウェーデンを+1タイムゾーンと考えることができないことです。タイムゾーンとタイムゾーンオフセットは2つの非常に異なるものです。これについての詳細は、the timezone tag wikiを参照してください。
代わりに、あなたは2次のいずれかの方法をとることができます。
はそれがIANA tzdb identifierだという点で、時間帯を考えてみて。スウェーデンの場合は、
Europe/Stockholm
を使用してください。 tzデータベースを実装する言語、ライブラリ、またはプラットフォームを使用して、このタイムゾーンを使用してUTCと現地時間の変換を行います。クライアント側のタイムゾーンが何であるかを把握する代わりに、クライアント側のオペレーティングシステムを使用して現地時間に変換してください。ほとんどの環境(WebブラウザのJavaScriptを含む)は、UTCから現地時間に変換することができます。この方法では、クライアントとサーバー間のUTC時間のみを送信します。
また、あなたは疑問に要求していないが、あなたのタイトルにあなたは将来イベントを述べました。これは非常に異なるシナリオです。多くの場合、にはが必要です。現地時間とIANAタイムゾーンをキャプチャします。 this answer for more detailsを参照してください。
- 1. Laravel:過去と未来のイベントにユーザーがアクセスするのを防ぐ
- 2. mysqlテーブルの過去と未来の行を照会する
- 3. ストリーム処理アーキテクチャ:将来のイベントの過去の結果
- 4. デザインパターン - 過去、現在、そして未来Erich Gamma talk
- 5. のMySQL - ソートまず、将来の事象、その後過去のイベント
- 6. JavaScript日付オブジェクトを使って未来と過去の日付と時刻を扱う
- 7. 過去、現在、そして未来の緊張の命名関数?
- 8. 未来の日付を過去の日付に置き換えます。
- 9. nodejsの過去/未来の時間からプログラムを実行する
- 10. Pythonコピーと過去
- 11. mysqlデータベースから過去と現在のイベントにPHP
- 12. SVNと過去の日付とのマージ
- 13. クレジットカードMMYYフォーマットの将来や過去の日付
- 14. 未完成の子とその未来
- 15. 未来のAWTとスイング?
- 16. 未来:WPFとSilverlight
- 17. 過去のアラームトリガー
- 18. Javaで過去5年間と来年を取得する方法
- 19. 未来と未来の違いは何ですか?
- 20. 未来と未来の違いは何ですか?
- 21. postgresql - タイムゾーンの過去および未来のオフセットの変更のリストを抽出する方法
- 22. 過去の出来事に基づいて次のイベントの発生を予測します
- 23. 過去の要素をスクロールするとjqueryイベントが発生する
- 24. ページイベント - API v2.4を使用したときに返された過去イベントのみ+
- 25. のIntelliJ IDEA - 過去のある時点の未定から
- 26. Fullcalendarの過去のイベントの色を変更します
- 27. 指定した日付の過去の分析イベントのトリガー
- 28. jQueryで過去、現在、未来の日付にクラスを追加して追加する
- 29. クリア後の過去のイベントを受け取るFLAG_NOT_TOUCHABLE
- 30. TSQL GROUPと平均過去3年間
通常、タイムスタンプはUTCタイムスタンプ+タイムスタンプ取得時のUTCからのユーザーのオフセットとして格納されます。あらゆる種類の人間に直観的な振る舞いを実装することができます。 –
それは私が考えていたものですが、私はこれまで、datetime列に付随するオフセット列があるデータベースを見たことがありませんでした。 –