Java 时间时区、CDT和CST问题

全栈程序员
后端领域优质创作者
2024-01-02 09:23:08

问题描述

@Test
public void test4() throws ParseException {
    String str = "1989-05-29 00:00:00";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 不加时区有问题
    // TimeZone.setDefault(TimeZone.getTimeZone("GMT+08"));
    simpleDateFormat.parse(str);
}

img

  • 打印获取到日期,发现两个日期存在了时区的不同,一个为CDT,一个为CST

  • 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:为美国、澳大利亚、古巴或中国的标准时间。

  • CST的时间和CDT的时间是相差了13个小时。

    解决方案

  • 常用的CMT+8的时区设置,并不兼容夏令时。

  • 使用TimeZone = Asia/Shanghai,则会兼容夏令时。

  • mysqlurl,修改为配置serverTimezone=Asia/Shanghai;解决了插入数据库时间错误问题

  • 当返回给前端的时候,设置JsonFormattimeZone的时候,也需要使用此配置:@JsonFormat(timezone = “Asia/Shanghai”, pattern = “yyyy/MM/dd”)这样才可以保证前端的数据展示正确。

...全文
885 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

17

社区成员

发帖
与我相关
我的任务
社区描述
全栈工程师社区
前端后端java 技术论坛(原bbs) 北京·大兴区
社区管理员
  • 全栈程序员
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧