私のコードは現在Javaの日付を使用しています。
Mysqlにはdatetime列があります。
ユーザーがタイムゾーンを設定できるようにしたいので、アプリケーションでタイムゾーンを反映するように日付を変換します。
SpringMVCを使用しています。
これどうやってするの?
私のコードは現在Javaの日付を使用しています。
Mysqlにはdatetime列があります。
ユーザーがタイムゾーンを設定できるようにしたいので、アプリケーションでタイムゾーンを反映するように日付を変換します。
SpringMVCを使用しています。
これどうやってするの?
一般的な戦略は、UTC(+0)を使用してデータベースに日付と時刻の情報を保存し、GUIレイヤーでユーザーのタイムゾーン設定との間で変換することです。
MySQLのDatetime
タイプには、タイムゾーンが関連付けられていません。代わりに、デフォルトでは、Connector / J(MySQL JDBC Driver)はサーバーのタイムゾーンを使用して日付を取得します。それを変更するための設定がありましたが、それが文書化されているかどうかはわかりません。ソースを調べて、どのように機能するかを確認する必要がありました。
ユーザーのタイムゾーンを別の列として保存し、それVARCHAR
を日付オブジェクトの作成時に使用できます。すべてのデータを変更したくない場合は、time_zone
列にサーバーのデフォルトのタイムゾーンを入力してから、ユーザーのタイムゾーンを徐々に変更できます。次のコードを使用して、UTCタイムスタンプを取得できます。Calendar / Dateオブジェクトはかなり混乱しているので、 JodaTimeを使用する方がよいでしょう。
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();