linux下如何解决jvm执行取得的时间和系统时间不一致的问题

本文记录了一次接口调试过程中遇到的参数解析问题。在服务器环境下,由于JVM时间和系统时间存在近8小时的偏差,导致参数加密解密失败。文章详细介绍了问题定位过程及解决方案,包括调整JVM时区设置和系统时区配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在和对端系统调试接口的时候发现一个怪问题。用本地环境调试调用接口没有问题,发到服务器上问题就来了参数解析不了。确认了版本没有问题以后,一步步分析。这接口对端要求我们参数通过AES加密传过去,秘钥是一串字符加年月日的时间戳。怀疑是服务器时间不对引起的,但是通过date命令查看发现服务器的时间是正常的。通过打日志才发现通过Java程序代码new Date()取得的时间比服务器的时间少了近8个小时,所以加密后对端解密解密不了。

现在就要办法解决jvm执行取得的时间和系统时间不一致的问题。通过在网上查阅资料,应该是jvm运行的时区设置问题。

解决的办法有几种:

1、在程序中使用java的函数设定时区。
2、在启动java程序时加参数-Duser.timezone=GMT+8

3、调整系统的时区设置

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

发现/etc/sysconfig/clock 配置文件的时区还是纽约时间,难怪会差近8个小时咯。可能是装系统的时候没有没有选择时区默认的纽约时间。

通过第三种方法调整好系统的时区设置,果然执行后一切正常。

### 如何在Linux系统中安装JDK #### 安装前准备 在开始之前,确认当前系统的版本以及是否已经预装了OpenJDK或其他Java实现。可以通过运行以下命令来验证是否存在已安装的Java版本: ```bash java -version ``` 如果返回的结果显示的是`openjdk version`或者其他版本号,则说明已有某种形式的Java存在[^2]。 #### 下载JDK软件包 前往Oracle官方网站或者采用开源替代方案如Adoptium下载适合目标操作系统的JDK压缩文件。对于大多数现代Linux发行版来说,推荐通过官方仓库获取最新稳定版本以简化管理流程并确保安全性更新及时应用。 #### 使用APT(适用于Debian/Ubuntu系) 执行如下指令序列完成基于APT工具链的操作过程: ```bash sudo apt update sudo apt install openjdk-17-jdk ``` 上述例子选择了安装第十七代别的开发套件;实际部署时可根据项目需求调整具体编号部分[^1]。 #### 利用YUM/DNF(CentOS/Fedora类) 针对Red Hat家族成员产品线中的成员执行下面给出的一组语句即可达成目的 : ```bash sudo yum check-update sudo yum install java-17-openjdk-devel # 或者如果你使用的是较新的Fedora版本可能需要这样调用dnf代替yum sudo dnf install java-17-openjdk-devel ``` 这里同样选取了对应于标准定义下的近期成果作为示范对象。 #### 手动方式处理RPM或TAR.GZ格式档案 当无法依赖内置包管理系统解决供应问题的时候,可以考虑手动解压二进制分发文档至自选路径下再做全局变量设定工作。 假设我们已经有了名为`jdk-xx_linux-x64_bin.tar.gz`这样的归档单元存放在家目录里头,那么继续往下看吧! ```bash tar zxvf jdk-xx_linux-x64_bin.tar.gz -C /usr/lib/jvm/ export JAVA_HOME=/usr/lib/jvm/jdk-xx export PATH=$JAVA_HOME/bin:$PATH echo 'export JAVA_HOME=/usr/lib/jvm/jdk-xx' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc ``` 注意替换其中的`xx`占位符为你所取得的确切版本标记[^3]。 #### 验证设置成功与否 最后一步总是要回头看看我们的劳动成果是是有效果咯!再次输入那熟悉的查询语法瞧一瞧呗~ ```bash javac -version ``` 要是能看到类似于`javac xx.x.xxx`样式的回应消息的话呀,恭喜啦朋友,这就代表一切顺利完成了哦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiejava1018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值