Java,Hibernate,MySQL - 存储UTC日期时间

时间:2013-08-08 12:22:13

标签: java mysql hibernate date utc

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

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

这样可以吗?

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

2 个答案:

答案 0 :(得分:3)

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

  • 不设置服务器计算机的时区,而是设置JVM的时区。这可以通过系统属性完成。在Windows上的示例如下
set JAVA_OPTS=%JAVA_OPTS% -Duser.timezone=GMT
  • 对于MySQL here is the reference这样做。
  • 现在确保所有日期时间都是GMT
  • 将时区保持为可配置属性,或者也可以依赖于用户。因此,如果用户属于不同的地理位置,则为每个用户存储时区。
  • 每当需要日期时,从数据库中选择日期后,应用时区以获得正确的时间。
  • 这种方法的优点是,这适用于所有时区用户。这意味着用户将根据其时区看到正确的时间。

答案 1 :(得分:0)

使用locales实现国际化。