Joda-Time 时区
2018-11-29 本文已影响157人
ba2cb747365a
背景
日期时间的存在,是需要时区的支撑的。比如北京时间 2018-11-29 10:12:00,换到其他时区,日期时间就变了。本故事来讲讲时区会造成哪些坑
示例
虚拟机或docker时区未设置
虚拟机和docker默认时区是UTC,比北京上海时间要晚8个小时。如果没有设置时区,有以下几个问题
- 应用打印的日志的时间戳比现在小了8小时,根据日志排查问题就扯了淡了
- new Date() 出来的日期时间是UTC日期时间,存到数据库后就是错误的日期时间数据
数据库时间未设置
不同数据库对于时区的处理不太一样。数据库如果没有正确设置时区,可能有以下几个问题
- 字段timestamp 类型,如果设置了新增自动生成或更新自动生成,时间可能不对。
- 现有的字段timestamp类型的数据,如果更改了时区,那么查询出来的时间也可能不对。
原因是timestamp 是附带时区的,如果应用时区和数据库时区不一致 ,可能会导致时间错乱。
对于datetime类型的数据,改变数据库时区对其是没有影响的,因为它跟Joda-Time的LocalDateTime一样,没有时区。不受影响。
总结
- 不同数据库对于时区的处理不太一样,后续通过实践来分析一下,不同的应用时区,数据库时区,在进行业务开发时,会造成什么问题。
- 在开发应用时,需要事先设置好虚拟机或容器的时区,以及数据库的时区。保证它们是一致的。