偶遇一个线上问题---时间不一致

本地和线上环境时间不一致问题

事情是这样的,有一个业务需要获取当前时间戳,在本地测试的好好的,可是一到线上Linux服务器部署后,

就出现了本地与线上时间不一致的问题

复现一下场景,就不写Service了,直接复现这个场景问题

java 复制代码
public class TestController {
    @GetMapping("/test")
    public Result test(){
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return new Result(200,"时间戳为:",simpleDateFormat.format(date).substring(0,19));
    }
}
  • 然后进行本地测试,ok没有问题就是这个时间

  • 再到公网进行测试

  • 发现Linux线上的时间和本地(Macos、Windows)的时间竟然不一致,仔细一看刚好就是差8个钟,总觉得跟某个时区的时间差很像

    查阅资料后发现是Linux读取时间的时候所属的时区跟本地是不一样的,应该是jvm运行的时区设置问题

    在网上看到的解决方法,调整Linux系统时区设置,发现不好使

    ini 复制代码
    vi /etc/sysconfig/clock   #编辑时间配置文件
        ZONE="Asia/Shanghai"
        UTC=false                   #设置为false,硬件时钟不于utc时间一致
        ARC=false
    
    ln -sf /usr/share/zoneinfo/Asia/Shanghai    /etc/localtime    #linux的时区设置为上海时区
    
    ntpdate  cn.pool.ntp.org    #对准时间
    
    /sbin/hwclock --systohc   #设置硬件时间和系统时间一致并校准 

    最后是通过在Java程序启动的时候添加-Duser.timezone=GMT+8参数,解决了时间不一致问题

    以Docker启动Java项目举例,在Dockerfile中添加配置

    ini 复制代码
    # 设置环境变量
    ENV TZ=Asia/Shanghai
    ENV JAVA_OPTS="-Duser.timezone=GMT+8"
相关推荐
nnerddboy2 分钟前
Rust教程04:引用、借用与切片
开发语言·后端·rust
岁岁种桃花儿7 分钟前
Vue核心语法第一篇:Vue是什么?
前端·javascript·vue.js
Rain的Java大神之路12 分钟前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
观无1 小时前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
愚公搬代码1 小时前
【愚公系列】《Web应用安全》001-VMware的安装
前端·安全
xiaohaiAIgeo1 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
立少→万能汉编1 小时前
用“立少→超文本”写静态网页,标签<倍>
服务器·前端·javascript
weixin_431600441 小时前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
小强库计算机毕业设计1 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战
你挚爱的强哥2 小时前
【chromeDownload】自定义组件:多用于登录框底部提供下载Chrome谷歌浏览器的链接
前端·vue.js·chrome