[解決済み] 時刻は常にUTCで保存するのが良いのでしょうか、それともローカルタイムで保存するのが良いのでしょうか?
質問
一般に、時刻はUTCで保存するのがベストプラクティスです。 ここで および はこちら .
例えば終了時刻が、そのタイムゾーンの夏時間がオンかオフかに関係なく、常に同じ現地時間(例えば17:00)になるような、繰り返し発生するイベントがあるとします。また、特定のタイムゾーンで夏時間がオンまたはオフになったときに、手動で時刻を変更しないことが要求されています。また、API(GetEndTimeByEventなど)を通じて他のシステムから終了時刻を尋ねられると、常にUTCフォーマットで終了時刻を送信することが要件となっています。
アプローチ1: 決定された場合 をUTCに格納する で保存する場合、以下のようにデータベースのテーブルに保存することができます。
Event UTCEndTime
=====================
ABC 07:00:00
MNO 06:00:00
PQR 04:00:00
最初のイベントABCの場合、UTCでの終了時刻は07:00ですが、2012年7月1日にUTCからローカルタイムに変換して表示すると、ローカルタイム17:00となり、2012年10月10日(タイムゾーンで夏時間がONの日)に変換すると、終了時刻18時となり、正しい時刻とは言えなくなります。
私が考えられる1つの方法は、DST時間を追加の列に保存し、タイムゾーンがDSTをONにしているときにその時間を使用することです。
アプローチ2。 しかし、もしそれが がローカル時間として保存されている場合 として保存された場合、例えばイベントABCではUTCから現地時間への変換が行われないため、どの日付でも常に17:00となります。
Event LocalEndTime
=======================
ABC 17:00:00
MNO 16:00:00
PQR 14:00:00
そして、アプリケーション層はローカルタイムをUTCタイムに変換し、(API GetEndTimeByEvent)を通じて他のシステムに送信します。
この場合でも、UTCで時間を保存するのは良いアイデアでしょうか?もしそうなら、一定のローカル時刻を得るにはどうしたらよいでしょうか。
関連する質問 UTCでない時間を保存する正当な理由があることがありますか?
どのように解決するのですか?
その質問に答えるためには、タイムスタンプを保存するためにUTCを使うことの利点について考える必要があると思うのです。
個人的には、その主な利点は、時刻が常に(ほとんど)保証されていることだと思います。 一貫して . 言い換えれば、タイムゾーンが変更されたり、サマータイムが適用されたりするたびに、時間が前後することがないのです。これは、ファイルシステムやログなどでは特に有効です。しかし、それは 必要 は必要でしょうか?
2つのことを考えましょう。まず、DSTのクロックシフトの時間について。あなたのイベントは、(クロックシフトが行われる日の)午前2時から午前3時の間に発生しそうでしょうか?そのとき、何が起こるべきでしょうか?
第二に、アプリケーションは実際のタイムゾーンの変更の影響を受けるでしょうか。言い換えれば、ロンドンからワルシャワまでそれを持って飛び、コンピュータのタイムゾーンを適切に変更するつもりですか? その場合、どうなるのでしょうか。
もしあなたが いいえ と答えた場合、現地時間の方がよいでしょう。その方がアプリケーションをよりシンプルにすることができます。しかし、もしあなたが はい と答えたのなら、もっと考えてみるべきだと思います。
これはすべてデータベースに関することでした。もうひとつは、アプリケーションが内部で使用する時間形式です。
APIで時刻を公開するとおっしゃいました。アプリケーションはリクエストのたびにデータベースに問い合わせるのでしょうか。内部で時刻を UTC として保存する場合、それを行うか、または DST/タイムゾーンの変更時にキャッシュされた時刻が調整/刈り取られることを確実にする必要があります。
時間自体に対して何かするのでしょうか? たとえば このイベントは8時間後に発生します と表示したり、その時間帯の間、自分自身を停止させたりしますか?もしそうなら、おそらくUTCの方がよいでしょう。もちろん、前述のすべての問題を考慮する必要があります。
関連
-
[解決済み] Pythonのtime.time()はローカルタイムスタンプとUTCタイムスタンプのどちらを返すのでしょうか?
-
[解決済み] UTCの日付時刻をローカルの日付時刻に変換する
-
[解決済み] ローカルタイム文字列をUTCに変換する方法は?
-
[解決済み】文字列表現を使わずにタイムゾーンを設定した日付を作成する
-
[解決済み] [Solved] Pythonでdatetime.day()の値を「タイムゾーンを考慮」して取得するにはどうすればよいですか?
-
[解決済み] ミリ秒を可読形式に変換するには?
-
[解決済み] JPAとHibernateで日付/時刻とタイムスタンプをUTCタイムゾーンに保存する方法
-
[解決済み] Rails 3でUTCをローカルタイムに変換する
-
[解決済み] ゼロベース月番号【終了しました
-
[解決済み] JIRA JQL の日付による検索 - Now() (DateTime) の代わりに Today() (Date) を取得する方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン