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

系统时间和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.lryc.cn/news/233520.html

相关文章:

  • 23111701[含文档+PPT+源码等]计算机毕业设计javaweb点餐系统全套餐饮就餐订餐餐厅
  • RabbitMQ 部署及配置详解(集群部署)
  • 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码
  • 「分享学习」SpringCloudAlibaba高并发仿斗鱼直播平台实战完结
  • Vue|props配置
  • 使用Microsoft Dynamics AX 2012 - 2. 入门:导航和常规选项
  • 【代码随想录】算法训练计划21、22
  • java实现钉钉机器人消息推送
  • C语言之break continue详解
  • mysql group by 执行原理及千万级别count 查询优化
  • Linux的几个常用基本指令
  • mac中安装Homebrew
  • Vue23的计算属性(computed)
  • vue3中祖孙组件之间的通信provide和inject
  • 月影下的时光机:Python中的日期、时间、农历、节气和时区探秘
  • 【Bazel】Bazel 学习笔记
  • 2023年“华为杯”第二十届中国研究生数学建模成绩数据分析(末尾有吃席群)
  • Linux文件和文件夹命令详解
  • MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件
  • 微服务nacos实战入门
  • PyCharm 远程连接服务器并使用服务器的 Jupyter 环境
  • HBase中的数据表是如何用CHAT进行分区的?
  • rabbitMQ的direct模式的生产者与消费者使用案例
  • 分布式应用服务拆分
  • matplotlib 绘制双纵坐标轴图像
  • 74基于matlab的PSO-ELM的多输入,单输出结果预测,输出训练集和测试机预测结果及误差。
  • shell之head命令
  • 网络安全之了解安全托管服务(MSS)
  • linux进程间通信之共享内存(mmap,shm_open)
  • C/C++---------------LeetCode第1748.唯一元素的和