一尘不染

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

hibernate

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

  • 将MySQL和Application Server计算机都设置为UTC时区(无需分开)
  • MySQL和JVM都应该选择基础系统时间设置(如果没有其他说明的话)
  • DATETIME在MySQL端使用表列
  • 使用java.util.Date如Hibernate的侧面相应的映射(我想java.sql.Timestamp可能也使用)
  • 让应用程序担心解释日期时间字段-即让用户选择首选时区

这个可以吗?

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


阅读 219

收藏
2020-06-20

共1个答案

一尘不染

我建议另一种简单的方法,该方法与计算机时区设置无关。

  • 代替设置服务器计算机的时区,而是设置JVM的时区。这可以通过系统属性来完成。在Windows上的示例如下
set JAVA_OPTS=%JAVA_OPTS% -Duser.timezone=GMT
  • 对于MySQL,这里是执行此操作的参考
  • 现在,这可以确保您所有的日期时间都在格林尼治标准时间
  • 保持时区为可配置属性,也可以取决于用户。因此,如果用户属于不同的地理位置,则可以为每个用户存储时区。
  • 每当需要日期时,从数据库中选择日期后,请应用时区以获取正确的时间。
  • 这种方法的优点是,它适用于所有时区用户。这意味着用户将按照他们的时区看到正确的时间。
2020-06-20