docker容器时间和主机时间不一致(相差8小时)的所有解决方法,看这篇就够了

docker容器的时间和宿主机时间不一致相差8小时

原因:

  • new date()调用的是jvm时间,而jvm使用的时间默认是0时区的时间,即:和北京时间将会相差8小时。
  • mybatis将本地的数据传入到mysql数据库服务器的时候,服务器会对数据进行检测,会把date类型的数据自动转换为mysql服务器所对应的时区,即0时区,所以会相差8小时。
  • springboot中对加了@RestController或者@Controller+@ResponseBody注解的方法的返回值默认是Json格式,
    所以,对date类型的数据,在返回浏览器端时,会被springboot默认的Jackson框架转换,而Jackson框架默认的时区GMT(相对于中国是少了8小时)。所以最终返回到前端结果是相差8小时

针对这三个原因的解决方法分别是:

方法一:

  • 在启动类的main方法里加上:
//(二选一即可,效果一样)
//设置时区为亚洲上海(即东八区)
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
//设置时区为标准0时区+8(即东八区)
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

如:
启动类配置文件

方法二:

  • yaml文件的数据库驱动连接上配置:
url: jdbc:mysql://192.168.100.1:3306/link?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true&serverTimezone=Asia/Shanghai

如:
yaml配置文件

jdbc:mysql://localhost:3306/link: 这部分指定了数据库的连接方式和地址。jdbc 表示使用 JDBC 连接,mysql 表示使用 MySQL 数据库,localhost 是数据库服务器的地址,3306 是 MySQL 服务器的默认端口,link 是数据库的名称。
useUnicode=true&characterEncoding=UTF-8: 这两个参数指定了在与数据库通信时使用 Unicode 编码,并将字符编码设置为 UTF-8。
allowMultiQueries=true: 允许一次执行多个 SQL 查询。
useSSL=false: 禁用 SSL 连接,通常在开发环境中使用。
serverTimezone=Asia/Shanghai: 设置服务器时区为亚洲上海(GMT+8)。

  • 如果还是不行,可以修改连接选项,如果是用MyBatisMyBatisPuls自动生成SQL语句导致的,实测可以解决
    数据库连接选项

方法三:

  • application.yml中配置:
spring:
  #解决前端取回日期少8个小时问题
  jackson:
    date-format: yyyy/MM/dd HH:mm:ss
    time-zone: GMT+8

如:
在这里插入图片描述




如果以上还不能解决问题,可以尝试这篇文章:
docker容器的时间和宿主机时间不一致相差8小时

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值