0

我的代码目前使用 java 日期。

Mysql 有列日期时间。

我想允许用户设置他们的时区,然后在我的应用程序中我将转换日期以反映他们的时区。

我正在使用 Spring mvc。

我怎样才能做到这一点?

4

2 回答 2

1

MySQL 中的Datetime类型没有与之关联的时区。相反,默认情况下,Connector/J(MySQL JDBC 驱动程序)使用服务器 timezone获取日期。有一个设置可以改变它,但我不知道它是否被记录,我必须查看源代码以了解它是如何工作的。

我可以将用户的时区保存为不同的列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();
于 2012-04-23T19:34:23.877 回答
1

常见的策略是使用 UTC (+0) 将日期和时间信息存储在数据库中,然后在 GUI 层中与用户的时区偏好进行转换。

于 2012-04-23T19:25:55.007 回答