2012-04-23 5 views
0

私のコードは現在、javaの日付を使用しています。自分のゾーンに基づいてユーザーの日付を設定できるように、日付/時刻をリファクタリングする方法はありますか?

MySQLは、カラムの日時があります。

は、私は、ユーザーが自分のタイムゾーンを設定することができるようにしたい、そして私のアプリケーションでは、私は自分のタイムゾーンを反映するために日付を変換します。

私は、Spring MVCを使用しています。

どうすればいいですか?

+0

リファレンス前の質問:http://stackoverflow.com/questions/6874146/jdbc-prepared-statement-setdate-doesnt-save-the-time-just-the-date-h – ahillman3

答えて

1

Datetimeタイプは、それに関連付けられたタイムゾーンを持っていません。代わりに、デフォルトでConnector/J(MySQL JDBCドライバ)はのサーバータイムゾーンを使用して日付を取得します。それを変更するための設定がありましたが、それが文書化されているかどうかわかりません。どのように動作するかを見るためにソースを調べなければなりませんでした。

私はVARCHARとしてそれを別の列をユーザーのタイムゾーンを保存し、日付オブジェクトを作成するときにそれを使うことができます。すべてのデータを変更しない場合は、time_zone列にサーバーの既定のタイムゾーンを設定してから、徐々にユーザーのタイムゾーンを変更します。次のコードを使用すると、UTCタイムスタンプを取得できます。 Calendar/Dateオブジェクトはかなり混乱しています。Joda Timeを使用する方がよいでしょう。

ResultSet rs = null; 

Date date = rs.getDate("date"); 

TimeZone userTimeZone = TimeZone.getTimeZone(rs.getString("time_zone")); 

Calendar c = Calendar.getInstance(userTimeZone); 
c.set(1900 + date.getYear(), date.getMonth(), 
    date.getDate(), date.getHours(), 
    date.getMinutes(), date.getSeconds()); 

//what you are actually interested in 
long utcTimestamp = c.getTimeInMillis(); 
1

一般的戦略は、変換次いでUTC(+0)とを使用して、データベース内の日付と時刻の情報を格納することに/ GUI層におけるユーザの時間帯嗜好から。 MySQLで

+0

私の日付がある場合すでに特定のタイムゾーンで、私はちょうど簡単に調整することはできません? – Blankman

+0

UTCの最も優れた機能の1つは、夏時間の混乱を避けることができることです。タイムゾーン対応のアプリケーションを使用したい場合は、データレイヤーとサービスレイヤーの両方でUTCを使用するように切り替えます。 – erikxiv

+0

@erikxivこれは実際には最も良いことですが、既存のシステムでは、このようなデータ移行は何度か実行するのが難しいかもしれません。 – jmruc