如何重构我的日期/时间,以允许根据用户的区域为其设置日期



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

Mysql 有列日期时间。

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

我正在使用Spring mvc。

我该怎么做?

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

我可以将用户的时区保存为不同的列VARCHAR,并在创建日期对象时使用它。如果不想更改所有数据,可以使用服务器默认时区填充time_zone列,然后逐步更改用户的时区。使用以下代码可以获取 UTC 时间戳。日历/日期对象非常混乱,最好使用 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 层中与用户时区首选项相互转换。

相关内容

  • 没有找到相关文章

最新更新