• 系统时间和JVM的Date时间不一致问题解决


    通过Java得到的时间与操作系统时间不一致,如何修改Java虚拟机时间?

    造成这种问题的原因可能是:你的操作系统时区跟你JVM的时区不一致。

    你的操作系统应该是中国的时区吧,而JVM的时区不一定是中国时区,你在应用服务器的Java虚拟机添加如下配置: -Dfile.encoding=UTF8 -Duser.timezone=GMT+08

    在一个精简的Linux安装上jre,发现所有的java程序获取的时间都不是系统时间。后来发现原来是时区不对。java程序获取的时间都是GMT时间,而系统是北京时间,应该是GMT+8,刚好相差8小时。网上搜了好多资料,只有两种方法:

    1、在程序中使用java的函数设定时区。

    2、在启动java程序时加参数-Duser.timezone=GMT+8

    不过总不能去修改每个程序的源码去设定时区吧。也不想在每个java程序启动的时候加参数,太麻烦了。就没有一劳永逸的办法了?

    开始以为jre应该会有某个配置文件保存了时区的配置,结果一无所获。不过总有jre总要去系统中获取时区配置吧。于是开始想是不是java用的是 linux中的系统配置文件?于是到linux系统下/etc/sysconfig目录看时区配置。发现缺少了clock这个用于设置时区的文件。把别的 linux系统中的这个文件拷过来一试,ok。java程序的时间和系统时间一致了。看来jre是从/etc/sysconfig/clock这个文件中 获取时区信息的。

    附clock文件内容:

    ZONE=“Asia/Shanghai”
    UTC=false
    ARC=false

    ZONE – 时区
    UTC – 表明时钟设置为UTC。
    ARC – 仅用于alpha表明使用ARC。

    总结:JVM的时区默认的是操作系统的时区,但是我们可以通过两种方式给JVM手动设置时区:通过代码和java启动参数。在android中,JVM的时区我们只能用代码来设置,因为默认的我们改不了;因为java的启动参数是通过jre设置的,而我们是看不到的,所以只能通过代码设
    置:

    TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));。
    
    • 1
  • 相关阅读:
    HTML进阶
    【总结】Idea 编译maven项目报错NoSuchMethodError DefaultModelValidator
    软考 系统架构设计师 简明教程 | 案例分析解题技巧
    抖音小程序-小玩法(学习笔记)
    MySQL【触发器】
    【Java面试题】List如何一边遍历,一边删除?
    java核心技术卷一 第4章 对象与类
    ImageNet classification with deep convolutional neural networks
    LeetCode 1769. 移动所有球到每个盒子所需的最小操作数 -- 前缀和
    陇剑杯线上——机密内存取证
  • 原文地址:https://blog.csdn.net/cljdsc/article/details/134471212