0%

Java, MySQL开发关于时间时区的最佳实践

Java 开发实践中,我们在处理时间、时区上总是搞得很乱。这里总结一下认为比较好的一个最佳实践,欢迎大家提出自己的意见。

Java 中不带时区的类 java.time.LocalDateTime,这个类对应 MySQL 中 datetime 类型。MySQL 中的 datetime 类型也是不带时区概念的。

不带时区概念的意思就是说,当我看到这个值的时候,并不能唯一确定时间,因为没有时区信息。

但 Java 中的类 java.util.Datejava.time.ZonedDateTime 却是带了时区的类,这个值,是能唯一确定时间的。

我们在中国开发应用程序时,最佳解决方案:

  1. Java, MySQL 所在服务器时间设置为东八区时间。

  2. Java, MySQL 默认使用服务器时区。

  3. java connector 6 版本以后,MySQL 连接字符串指定东八区,不指定是默认西五区的美国东部时间。

  4. 前端拿到东八区时间后,根据浏览器时区做相应的调整。前端提交表单时,拿到当地时间后,转换成东八区时间提交。