Java 开发实践中,我们在处理时间、时区上总是搞得很乱。这里总结一下认为比较好的一个最佳实践,欢迎大家提出自己的意见。
Java 中不带时区的类 java.time.LocalDateTime
,这个类对应 MySQL 中 datetime
类型。MySQL 中的 datetime
类型也是不带时区概念的。
不带时区概念的意思就是说,当我看到这个值的时候,并不能唯一确定时间,因为没有时区信息。
但 Java 中的类 java.util.Date
或 java.time.ZonedDateTime
却是带了时区的类,这个值,是能唯一确定时间的。
我们在中国开发应用程序时,最佳解决方案:
Java, MySQL 所在服务器时间设置为东八区时间。
Java, MySQL 默认使用服务器时区。
java connector 6 版本以后,MySQL 连接字符串指定东八区,不指定是默认西五区的美国东部时间。
前端拿到东八区时间后,根据浏览器时区做相应的调整。前端提交表单时,拿到当地时间后,转换成东八区时间提交。