Java程序与服务器的时间问题

时区分类
UTCUniversal Time Coordinated  协调世界时 ,又称世界标准时间
GMT :Greenwich Mean Time  格林尼治平均时
CSTCST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间:
Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
CETCentral European Time 欧洲中部时间
DSTDaylight Saving Time 夏日节约时间
Unix时间戳: 所看到的UTC时间那就是从1970年(1970年01月01日 0:00:00))这个时间点起到具体时间共有多少秒。 这个秒数就是Unix时间戳。
关系大概如下:
UTC=GMT(通常)
CST=UTC+8=GMT+8
CET=UTC/GMT + 1
CST=UTC/GMT +8
CST=CET+9

查看linux的时间 date -R
查看docke容器时间 docker exec b2de5384d2ae date
确保两个时间的时区与时间是统一的

本地环境 win10+idea+jdk8
服务器环境 centeos+docker+jenkins+springboot+jdk8

场景:传入参数为字符串“2018-06-06”, java用Date接收
本地环境接收后后为 CST 时间为2018-06-06 00:00:00
服务器环境接收后为 UTC 时间为2018-06-05 16:00:00
也就是java程序默认使用UTC时间 很明显时区错了,解决方案,本帅比百度了一下,总结下来2种:
第一种:-Duser.timezone=GMT+08
第二种:设置容器时区为CST时间
第一种这句话写在哪里呢,因为项目是jenkins+docker部署,所以首先想到的是部署的脚本如下:

里面有这段代码,但是保存到数据库的日期还是少8个小时,那么这段脚本根本就没生效,所以,可不可以把这个时区的设置放到代码里面呢,答案是可以的,在springboot启动类中加入如下代码:

设置GMT+8为时区,测试后发现成功了,但是还是感觉不太舒服,毕竟这种时区的设置还是不要放到启动类里面为好,而且发现很多项目并没有这样去处理这个问题,那么肯定是有其他的方法,翻阅了公司其他类似项目,终于发现了另外一个解决方案,就是第二种解决方案,既然是docker,而spingboot里面的Dockerfile文件在项目部署的时候起到了真正的作用,截图图下:

其实就是将docker每次启动容器,会添加CST东八区时间到容器本地时间,然后再修改时区,修改时区后java程序会以修改后的时区为准。这样java程序转化数据时就会以CST时区为准。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值