7

元の日時に関する情報を保持しながら、ユーザーが自分のローカル時間のデータを表示/クエリできるように、日時を保存する実用的な方法は何ですか。

基本的に、ユーザーは、さまざまなタイム ゾーンのシステムから収集されたデータを (自分の現地時間で) クエリできることを望んでいます。しかし、データが元のシステムでたとえば 18:00 に作成されたことを知りたい場合があります。世界のさまざまな地域のユーザーが同じイベントについてやり取りするときに役立ちます。

User1: What? We don't have any data for 20:00
User2: Dude, it says 20:00 right there on my screen.
User1: Wait, what timezone are you? What's the UTC-time?
User2: What is UTC? Is that something with computers?
User1: OMFG! *click*

データの保存方法についてアドバイスを求めています。

すべての日時を UTC で保存し、元のタイムゾーン名を含む列を追加して、 mysql CONVERT_TZ、または Java で対応するものを使用できるようにすることを考えています。その後、アプリケーションはユーザーが入力した日付を UTC に変換し、データベースに簡単にクエリを実行できます。すべての日付は、アプリケーションでユーザーの現地時間に簡単に変換することもできます。元のタイムゾーン列を使用して、元の日時も表示できます。

ただし、これは、私が持っている日時ごとに、追加の列が必要であることを意味します...

start_time_utc datetime
start_time_tz  varchar(64)
end_time_utc   datetime
end_time_tz    varchar(64)

私はここで正しい軌道に乗っていますか?

そのようなデータを扱ったことのある人は、自分の経験を共有してくれますか?

(MySQL 5.5 CE を使用します)

更新 1

データは、各エントリがローカル タイム ゾーンの日時を持つ xml ファイルで配信されます。したがって、挿入プロセスは 1 つだけで、1 つの場所で実行されます。

データベースに読み込まれると、さまざまなタイム ゾーンのユーザーに Web アプリケーションで表示されます。ユース ケースの大部分では、関心のあるデータは、ユーザーがデータを見ているのと同じタイム ゾーンから発生していました。より複雑なユース ケースの一部では、一連のイベントが相互に関連し、複数のタイム ゾーンにまたがっています。したがって、ユーザーは、考えられる原因/結果を相手の時間で調査するために、イベントについて話すことができることを望んでいます。UTC ではなく、独自の現地時間でもありません。

4

3 に答える 3

6

ユーザーはさまざまなタイムゾーンに住むことができ、あるタイムゾーンから別のタイムゾーンに移動することもできるため、ベストプラクティスは、日付と時刻をUTCで保存し、表示時にユーザーのタイムゾーンに変換することです。

于 2013-01-20T07:16:51.033 に答える
4

マニュアルには、タイムスタンプに関するこのためのセクションがあります。

TIMESTAMP 値は、保存のために現在のタイム ゾーンから UTC に変換され、検索のために UTC から現在のタイム ゾーンに変換されます。(これは TIMESTAMP データ型でのみ発生し、DATETIME などの他の型では発生しません。) デフォルトでは、各接続の現在のタイム ゾーンはサーバーの時間です。セクション9.6「MySQL サーバーのタイム ゾーン サポート」で説明されているように、タイム ゾーンは接続ごとに設定できます。タイム ゾーンの設定が一定である限り、保存した値と同じ値が返されます。TIMESTAMP 値を格納し、タイム ゾーンを変更して値を取得すると、取得した値は格納した値とは異なります。これは、両方向の変換に同じタイム ゾーンが使用されていないために発生します。

http://dev.mysql.com/doc/refman/5.5/en/timestamp.html

したがって、次を使用できます。SET time_zone = timezone;クライアントでタイムゾーンを設定します。次に、すべてのクエリがタイムスタンプを正しいタイム ゾーンに変換します。タイムゾーンの設定を除いて、Javaで複雑なことをする必要はありません(JDBC接続文字列のパラメーターでさえあると思います)

于 2011-01-10T15:11:10.577 に答える
0

すべての計算のベースとしてズールー時間をいつでも取得できます。

于 2011-09-28T16:46:21.650 に答える