Joda-Time 时区

作者: ba2cb747365a | 来源:发表于2018-11-29 10:05 被阅读157次

    背景

    日期时间的存在,是需要时区的支撑的。比如北京时间 2018-11-29 10:12:00,换到其他时区,日期时间就变了。本故事来讲讲时区会造成哪些坑

    示例

    虚拟机或docker时区未设置

    虚拟机和docker默认时区是UTC,比北京上海时间要晚8个小时。如果没有设置时区,有以下几个问题

    • 应用打印的日志的时间戳比现在小了8小时,根据日志排查问题就扯了淡了
    • new Date() 出来的日期时间是UTC日期时间,存到数据库后就是错误的日期时间数据

    数据库时间未设置

    不同数据库对于时区的处理不太一样。数据库如果没有正确设置时区,可能有以下几个问题

    • 字段timestamp 类型,如果设置了新增自动生成或更新自动生成,时间可能不对。
    • 现有的字段timestamp类型的数据,如果更改了时区,那么查询出来的时间也可能不对。

    原因是timestamp 是附带时区的,如果应用时区和数据库时区不一致 ,可能会导致时间错乱。
    对于datetime类型的数据,改变数据库时区对其是没有影响的,因为它跟Joda-Time的LocalDateTime一样,没有时区。不受影响。

    总结

    • 不同数据库对于时区的处理不太一样,后续通过实践来分析一下,不同的应用时区,数据库时区,在进行业务开发时,会造成什么问题。
    • 在开发应用时,需要事先设置好虚拟机或容器的时区,以及数据库的时区。保证它们是一致的。

    相关文章

      网友评论

        本文标题:Joda-Time 时区

        本文链接:https://www.haomeiwen.com/subject/pdcxcqtx.html