2016-04-17 2 views
-1

私は、単一のタイムゾーンでのみ使用されるシステムで作業していますが、utcで日付と時刻を公開する他のシステムと統合しているので、方法だけでなく。私たちはまた、あなたの時間を記憶することがとにかく行く方法であることを以前から聞いたので、トラブルを最小限に抑える最も簡単な道のように感じました。最近、私たちはいくつかの問題に遭遇しました。我々はユーザーに価値のあるイベントをシステムに記録しているので、ユーザーにそれらを検索させて表示させます。スウェーデンは+1タイムゾーンにあるので、現地時間09:00のイベントは0800 utc時間として保存されます。ユーザーにイベントを表示すると、夏時間が迫ってから最近まで現地時間に戻すことができます。0800 utcを現地時間に翻訳すると2時間が追加されます。ログに記録されたイベントは、10時に起きたようです。私はこれをどのように扱うべきですか?この場合、保存された時間がdbに実際に保存された時間と同じ時間である場合、dstがその特定の時刻にオンまたはオフになったかどうかに応じて、日付を見て調整することができます。しかし、私はこれには汎用的な解決策が必要だと思う。なぜなら、将来、過去の時点を表す必要があるシステム内のさまざまな場所(他の場所)にタイムスタンプが作成されるからです。私には2つのオプションがあるように見えます。 1.ローカル時刻を保存することに戻り、utcを使用する他のシステムと統合するときに余分な作業をするか、または2.それぞれのutcタイムスタンプストアとともに、dst中にタイムスタンプが作成されたかどうかを示すデータを格納します。私が間違っている?右?行方不明?過去と未来のイベントのUTCとDST

+0

通常、タイムスタンプはUTCタイムスタンプ+タイムスタンプ取得時のUTCからのユーザーのオフセットとして格納されます。あらゆる種類の人間に直観的な振る舞いを実装することができます。 –

+0

それは私が考えていたものですが、私はこれまで、datetime列に付随するオフセット列があるデータベースを見たことがありませんでした。 –

答えて

0

getTimezoneOffsetメソッドを使用すると、クライアントのタイムゾーンオフセットをいつでも取得できます。今すぐ残っているのは、このタイムゾーンオフセットをデータベースに保存されているUTCの日付に適用し、エンドユーザに正しい日付を表示することです。一方、イベントがデータベースに記録されたときにユーザーが使用したタイムゾーンオフセットを表示する必要がある場合は、このオフセットを記録するためにDBに追加の列があります。複数のタイムゾーンを処理する場合、スウェーデンのユーザーが提出したインドのユーザーにレコードを表示するとどうなりますか?

+0

この方法には注意してください。 'getTimezoneOffset'への呼び出しは、特定のUTCの日付と時刻に対して行わなければなりません。 'new Date()。getTimezoneOffset()'を呼び出して結果を任意の値に適用するのはあまり一般的ではありません。これは問題の時間とはかなり異なるかもしれない*現在のオフセットです。 –

0

あなたが欠けている主なことは、スウェーデンを+1タイムゾーンと考えることができないことです。タイムゾーンとタイムゾーンオフセットは2つの非常に異なるものです。これについての詳細は、the timezone tag wikiを参照してください。

代わりに、あなたは2次のいずれかの方法をとることができます。

  1. はそれがIANA tzdb identifierだという点で、時間帯を考えてみて。スウェーデンの場合は、Europe/Stockholmを使用してください。 tzデータベースを実装する言語、ライブラリ、またはプラットフォームを使用して、このタイムゾーンを使用してUTCと現地時間の変換を行います。

  2. クライアント側のタイムゾーンが何であるかを把握する代わりに、クライアント側のオペレーティングシステムを使用して現地時間に変換してください。ほとんどの環境(WebブラウザのJavaScriptを含む)は、UTCから現地時間に変換することができます。この方法では、クライアントとサーバー間のUTC時間のみを送信します。

また、あなたは疑問に要求していないが、あなたのタイトルにあなたは将来イベントを述べました。これは非常に異なるシナリオです。多くの場合、にはが必要です。現地時間とIANAタイムゾーンをキャプチャします。 this answer for more detailsを参照してください。

Daylight saving time and time zone best practicesもお読みください。

関連する問題