0

我在这里看到了一些相关的问题(比如这个,当然还有这个)......基本上,我想要的是将日期时间存储为UTC,并让应用程序用户选择他想要显示日期的时区-time in。
由于日期时间字段似乎受到底层 JDBC 驱动程序的影响,我想知道这是否是一种可以接受的存储 UTC 日期时间的方法:

  • 将 MySQL 和应用服务器机器都设置为 UTC 时区(无需分开)
  • MySQL 和 JVM 都应该选择底层系统时间设置(如果没有另外说明)
  • 在 MySQL 端使用DATETIME表列
  • java.util.Date用作 Hibernate 端的对应映射(我想java.sql.Timestamp也可以使用)
  • 让应用程序担心解释日期时间字段 - 即让用户选择首选时区

这个可以吗?

编辑
澄清 - 在这里我的意思是指严格在服务器上创建的时间戳(例如记录创建的日期时间)。因此应用程序服务器实例化Date对象(new Date() 等于服务器上的当前日期时间,这实际上与时区无关)。
现在,如果客户端用户想要提供一些日期以用于搜索/过滤目的,那么这里就是从客户端本地时间到 UTC 的转换应该发生的地方,恕我直言......

4

2 回答 2

3

我会建议另一种简单的方法,它独立于机器时区设置。

  • 设置 JVM 的时区,而不是设置服务器机器的时区。这可以通过系统属性来完成。在 Windows 上的示例如下
set JAVA_OPTS=%JAVA_OPTS% -Duser.timezone=GMT
  • 对于 MySQL ,这里是这样做的参考。
  • 现在这确保您所有的日期时间都在格林威治标准时间
  • 将时区保留为可配置属性,或者它也可以取决于用户。因此,如果用户属于不同的地理区域,您可以为每个用户存储时区。
  • 每当需要日期时,从数据库中选择日期后,应用时区以获取正确的时间。
  • 这种方法的优点是这将适用于所有时区用户。这意味着用户将根据他们的时区看到正确的时间。
于 2013-08-08T12:43:25.567 回答
0

用于locales实现国际化。

于 2013-08-08T12:38:18.657 回答