私のコードは現在、javaの日付を使用しています。自分のゾーンに基づいてユーザーの日付を設定できるように、日付/時刻をリファクタリングする方法はありますか?
MySQLは、カラムの日時があります。
は、私は、ユーザーが自分のタイムゾーンを設定することができるようにしたい、そして私のアプリケーションでは、私は自分のタイムゾーンを反映するために日付を変換します。
私は、Spring MVCを使用しています。
どうすればいいですか?
私のコードは現在、javaの日付を使用しています。自分のゾーンに基づいてユーザーの日付を設定できるように、日付/時刻をリファクタリングする方法はありますか?
MySQLは、カラムの日時があります。
は、私は、ユーザーが自分のタイムゾーンを設定することができるようにしたい、そして私のアプリケーションでは、私は自分のタイムゾーンを反映するために日付を変換します。
私は、Spring MVCを使用しています。
どうすればいいですか?
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();
一般的戦略は、変換次いでUTC(+0)とを使用して、データベース内の日付と時刻の情報を格納することに/ GUI層におけるユーザの時間帯嗜好から。 MySQLで
リファレンス前の質問:http://stackoverflow.com/questions/6874146/jdbc-prepared-statement-setdate-doesnt-save-the-time-just-the-date-h – ahillman3