0

私のコードは現在Javaの日付を使用しています。

Mysqlにはdatetime列があります。

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

SpringMVCを使用しています。

これどうやってするの?

4

2 に答える 2

1

一般的な戦略は、UTC(+0)を使用してデータベースに日付と時刻の情報を保存し、GUIレイヤーでユーザーのタイムゾーン設定との間で変換することです。

于 2012-04-23T19:25:55.007 に答える
1

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();
于 2012-04-23T19:34:23.877 に答える