• 数据库插入时间类型数据,存储值与插入值相差1小时/13小时 java


    排查思路

    1. 查看插入值是否正确无误
    2. 插入值是否因为进行字符串与其他类型转变导致值发生变化
    3. 查看sql 是否正确无误
    4. 查看数据库插入时打印日志是否无误
    5. 判断数据库链接时区问题

    遇到的问题复现

    本人是用esayexcel 导入数据,导入后发现 数据中有CDT 格式和CST格式,所以问题就出现这个CDT上 如果不知道这两个的区别大家可以自行百度,

    摘要
    名为 CST 的时区是一个很混乱的时区,在与 MySQL 协商会话时区时,Java 会误以为是 CST -0500,而非 CST +0800。

    CST 时区
    名为 CST 的时区是一个很混乱的时区,有四种含义:

    • 美国中部时间 Central Standard Time (USA) UTC-06:00
    • 澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
    • 中国标准时 China Standard Time UTC+08:00
    • 古巴标准时 Cuba Standard Time UTC-04:00

    今天是“4月28日”。为什么提到日期?因为美国从“3月11日”至“11月7日”实行夏令时,美国中部时间改为 UTC-05:00,与 UTC+08:00 相差 13 小时。

    解决方案

    解决方案:

    查看问题真正产生的原因。

    1. 打印获取到日期,发现两个日期存在了时区的不同,一个为CDT,一个为CST;
    2. CDT:为夏令时时间(中华人民共和国在1986年~1991年实行了夏令时制度,每年夏令时实行时间如下:
      1986年5月4日至9月14日(1986年因是实行夏令时的第一年,从5月4日开始到9月14日结束)
      1987年4月12日至9月13日,
      1988年4月10日至9月11日,
      1989年4月16日至9月17日,
      1990年4月15日至9月16日,
      1991年4月14日至9月15日。
      );CST:为美国、澳大利亚、古巴或中国的标准时间。
    3. CST的时间和CDT的时间是相差了13个小时。
      解决方案:
      常用的CMT+8的时区设置,并不兼容夏令时。
      而使用TimeZone = Asia/Shanghai,则会兼容夏令时。
      当mysql的url,修改为配置serverTimezone=Asia/Shanghai;解决了插入数据库时间错误问题。
      但是,当返回给前端的时候,设置JsonFormat的timeZone的时候,也需要使用此配置:@JsonFormat(timezone = “Asia/Shanghai”, pattern = “yyyy/MM/dd”);这样才可以保证前端的数据展示正确。

    在这里插入图片描述
    大佬博客:

    https://blog.csdn.net/weixin_38608626/article/details/108378687

  • 相关阅读:
    【MySQL面试题】经典面试题之“b+树”
    Python Day13 面向对象基础【初级】
    【go.mod file not found in current directory or any parent directory】
    微信小程序 java农产品商城供销系统#计算机毕业设计
    读FFA-net: Feature Fusion Attention Network for Single Image Dehazing
    2023-2024-1 for循环-1
    windows下载虚拟机virtualBox
    【Matytype】在CSDN博客中插入Mathtype行间与行内公式
    【USMA】N1CTF2022-praymoon
    【wsl】——windows wsl常用操作
  • 原文地址:https://blog.csdn.net/qq_36651772/article/details/125628057