zoukankan      html  css  js  c++  java
  • linux下如何解决jvm执行取得的时间和系统时间不一致的问题

    今天在和对端系统调试接口的时候发现一个怪问题。用本地环境调试调用接口没有问题,发到服务器上问题就来了参数解析不了。确认了版本没有问题以后,一步步分析。这接口对端要求我们参数通过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个小时咯。可能是装系统的时候没有没有选择时区默认的纽约时间。

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

  • 相关阅读:
    JS伪3D 图形透视效果
    源码安装apache及配置转发
    SpringSecutiry权限管理手册
    解决SMARTFORMS 中table 控件单行跨页的问题
    Cluster Table
    uva-133 The Dole Queue
    第三届蓝桥杯C++本科B组决赛解题报告(更新中)
    uva-673 Parentheses Balance
    VS2010不能编译SQLServer2005的Microsoft.SQLServer.ManagedDTS.dll的解决方法
    IOS设计模式学习(21)享元
  • 原文地址:https://www.cnblogs.com/xiejava/p/15171446.html
Copyright © 2011-2022 走看看