我的代码目前使用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 层中与用户时区首选项相互转换。