当前位置: 首页 > article >正文

系统时间和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"));。

http://www.kler.cn/news/134349.html

相关文章:

  • .Net6 部署到IIS示例
  • 【电路笔记】-欧姆定律
  • 100套Axure RP大数据可视化大屏模板及通用组件库
  • Linux环境下C++ 接入OpenSSL
  • 无需添加udid,ios企业证书的自助生成方法
  • 系列九、对象的生命周期和GC
  • Linux虚拟机中网络连接的三种方式
  • MySQL 教程 1.1
  • “ /^A-Z:\\{1,2}^/:\*\?<>\|+\.(jpg|gif|png|bmp)$/i ”这个正则表达式的理解
  • 月子会所信息展示服务预约小程序的作用是什么
  • Git-概念与架构
  • C语言 字符函数汇总,模拟实现各字符函数(炒鸡详细)
  • T10 数据增强
  • 树莓派通过网线连接电脑(校园网也能连接),实现SSH连接
  • 深入解析具名导入es6规范中的具名导入是在做解构吗
  • C++二分查找算法:有序矩阵中的第 k 个最小数组和
  • 数据结构 堆
  • 配置iTerm2打开自动执行命令
  • 打开游戏提示xapofx1_5.dll丢失如何修复?xapofx1_5.dll缺失的修复教程分享
  • 从一到无穷大 #19 TagTree,倒排索引入手是否是优化时序数据库查询的通用方案?
  • 滚雪球学Java(09-5):Java中的赋值运算符,你真的掌握了吗?
  • mac 打不开 idea 或者 pycharm 的方法
  • JVM垃圾回收相关概念
  • V100 GPU服务器安装GPU驱动教程
  • C语言二叉树的建立和遍历
  • 【论文复现】DAE:《Annotating and Modeling Fine-grained Factuality in Summarization》
  • 云原生专栏丨基于服务网格的企业级灰度发布技术
  • Go语言常用命令详解(二)
  • 【手写数据库toadb】数据库planner的整体架构,以及逻辑查询树的设计与实现流程
  • 深度学习损失函数