首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

Java 使用 LocalDateTime 存储时间导致快 8 小时

  •  
  •   rizon · 63 天前 · 1880 次点击
    这是一个创建于 63 天前的主题,其中的信息可能已经有所发展或是发生改变。

    java 程序运行环境是 CST 时区,mysql 服务是 UTC 时区。存储数据时,Date 类型存储会减去 8 小时,LocalDateTime 存储会按照 CST 直接存储。
    问题 1: 那么在不修改环境时区的情况下,这两种存储按说哪个是对的?

    问题 2: 现在读取时 Date 格式的展示正确,LocalDateTime 展示时会再加上 8 小时导致时间快 8 小时。怎么正确的解决这个问题。。

    问题 3: 马上要用了,怎么快速的修复这个问题???

    22 回复  |  直到 2019-04-24 15:51:43 +08:00
        1
    airfling   63 天前
    统一时区,就这样
        2
    coolyujiyu   63 天前
    你自己是什么时区,就都统一为什么时区,配置运行环境,甚至早过于你编码
        3
    rizon   63 天前
    @airfling #1
    @coolyujiyu #2

    是应该统一时区,统一之后就没问题了。可是我好奇的是,这个现象。
    为什么在时区不一样的时候,存的时候一个会直接存一个会减 8 而展示的时候又为啥都加了 8 ??
        4
    lihongjie0209   63 天前
    LocalDateTime 没有时区这个概念, 只是一个对于时间的表示

    如果要时区,那么使用 ZonedDateTime
        5
    zhfish   63 天前
    这个是 mysql connector 搞的鬼吧,本意是要自动处理时区问题
    你也可以加参数忽略时区

    不管是主机环境还是 docker 环境,都要注意时区的
        6
    zhfish   63 天前
    @lihongjie0209 说的对,其实和 LocalDateTime 没什么关系
        7
    learnshare   63 天前
    展示的时候进行了格式化,时区又一次产生了影响
        8
    chendy   63 天前
    还要看数据库字段用的啥,以及转换的代码怎么写的(或者用的什么框架 /工具)
    java 的 Date,数据库的 Timestamp 本质上是时间戳,时区不同展现不同
    java 的 LocalDateTIme,数据库的 DateTime,是写死的日期时间,怎么看都一样
    数据库的时区和客户端的时区不同其实并没有太大问题,转换的逻辑没写错就是
        9
    FrankFang128   63 天前
    ISO 8601 了解一下,存绝对时间,JSON 里面用 ISO 8601
        10
    sonyxperia   63 天前
    LocalDateTime 表示这锅不背
        11
    DarrenLuo   63 天前 via Android
    数据库连接字符串里加上 timezone=utc,这样 mysql 驱动会在存储的时候处理为 utc 时间,取出来的时候按机器的时区取出来
        12
    broadliyn   63 天前   ♥ 1
    1. 首先要看你 java 这边用的持久框架是什么,mybatis 或者是其他?
    2. 你的 mysql 驱动版本号是?
        13
    gaius   63 天前
    应该是你设置了 jdbc 连接的时区是+8,但是数据库是+0,而且数据库存储时间的那个类型是支持时区的。
        14
    yangbai   63 天前
    LocalDateTime Date 存的都是 UTC 的绝对时间戳,输出出来想怎么格式化看你的使用和环境
        15
    octocatami   63 天前
    注意操作系统时区
        16
    ARhen   63 天前
    之前就因为没统一时区导致爬虫判断发布时间出错了 //..//
        17
    Cat73   63 天前
    我们是所有地方统一 UTC 时间的,展示的地方自己去格式化
        18
    rizon   62 天前
    @Cat73 #17 嗯哼~看到一个萌妹子老乡唉~ 有在打算回去工作呢。 互链 blog 吗~~ https://rizon.top
        19
    JasonP   62 天前
    是存到数据库保存的时间和 应用中的时间不一致么?可能是因为数据库连接没有配置 serverTimezone。
        20
    ourslay   62 天前 via Android
    ORM 用的什么?
    MySQL 版本多少?
        21
    Cat73   62 天前
    @rizon #18 方便的话请用 @rizon.top 后缀的邮箱向 [email protected] 发一封邮件来交流,或者通过回复来告诉我你的邮箱
        22
    wuyao946   62 天前
    数据库连接 url 指定时区&serverTimezone=Asia/Shanghai
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3901 人在线   最高记录 5043   ·   Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 32ms · UTC 08:18 · PVG 16:18 · LAX 01:18 · JFK 04:18
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1