服务器时间正确,Java程序时区不对问题解决

服务器执行date命令显示时间正确
执行timedatectl status命令结果如下:
在这里插入图片描述
看起来是Time zone没有设置好,但是登录另外一台正常的服务器,执行timedatectl status也是一样的

直接写一个简单的Java程序TestTimeZone.java:

import java.util.TimeZone;public class TestTimeZone{public static void main(String[] args) {System.out.println(TimeZone.getDefault());}
}

编译&运行:
javac TestTimeZone.java
java TestTimeZone

分别在两台服务器上运行,对比结果:

//错误时区
sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]//正确时区
sun.util.calendar.ZoneInfo[id="Asia/Chungking",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]

阅读JDK源码,大致整理了一下Java获取默认时区的流程:

  1. 读取系统属性user.timezone(VM options)
  2. 读取环境变量 TZ 的值
  3. 读取文件/etc/timezone的值
  4. 查找 /etc/localtime文件,如果文件/etc/localtime是软链接,则直接读取软链的路径和文件名作为时区
  5. 如果文件/etc/localtime不是软链接而是一个普通文件,则去/usr/share/zoneinfo目录下读取时区文件,进行内容匹配,匹配到内容一致的文件名作为时区
  6. 如果都找不到,则以GMT作为默认时区

检查两台服务器进行验证,可以确定user.timezone和TZ都是没有设置的,然后/etc/timezone文件也没有,排除掉前3个
查看/etc/localtime文件,不是软链接,是一个普通文件

对 /etc/localtime进行查看:
先查看时区正确的机器,对比/etc/localtime文件和/usr/share/zoneinfo/Asia/Chungking文件,内容是相同的
再查看时区错误的机器,/etc/localtime文件内容和时区正确的机器相同,但是/usr/share/zoneinfo/Asia/Chungking文件内容不知为何被修改了

至此已经定位到原因,实际上即使时区正确的机器,时区设置也不太合理
解决问题的办法很多,可以通过把/etc/localtime软链到时区文件解决
我这里直接采用timedatectl set-timezone Asia/Shanghai命令的方式(实际也是通过软链的方式)

保险起见同时创建/etc/timezone文件,并设置内容为:Asia/Shanghai

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat安装与配置(详细教程)

Tomcat安装与配置(详细教程)_tomcat安装及配置教程_蒋洋大盗的博客-CSDN博客

【linux基础(六)】Linux中的开发工具(中)--gcc/g++

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到开通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 Linux中的开发工具 1. 前言2.…

适合初学者的云服务器——观星云

一款适合初学者的云服务器 官方网址:[观星云](https://www.guanxingyun.com/)活动地址:[观星云免费计划](https://www.guanxingyun.com/act/freecloud.html)B站官方:[酷友玩官方](https://space.bilibili.com/1906135621?spm_id_from333.337…

selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?

前言 相信大家在使用selenium做网页自动化时,会遇到如下这样的一个场景: 在你使用get访问某一个网址时,会在页面中弹出如上图所示的弹出框。 首先想到是利用Alert类来处理它。 然而,很不幸,Alert类处理的结果就是没…

基于YOLOv7算法的混凝土结构表面裂缝自主识别

Autonomous surface crack identification of concrete structures based on the YOLOv7 algorithm 1、模型接受1.1 yolov7架构:1.2 骨干网中增加一个Aatten模块1.3 加入Myswin模块的YOLOv7网络1.3 加入FEEM模块YOLOv7网络2、实验在本研究中,我们使用了一个改进的网络,名为Y…

LeetCode——动态规划篇(二)

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 343. 整数拆分 - 力扣(LeetCode) 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整…

【转存】从 JMM 透析 volatile 与 synchronized 原理

在面试、并发编程、一些开源框架中总是会遇到 volatile 与 synchronized 。synchronized 如何保证并发安全?volatile 语义的内存可见性指的是什么?这其中又跟 JMM 有什么关系,在并发编程中 JMM 的作用是什么,为什么需要 JMM&#…

ArcGIS 10.2安装教程!

软件介绍:ArcGIS是一款专业的电子地图信息编辑和开发软件,提供一种快速并且使用简单的方式浏览地理信息,无论是2D还是3D的信息。软件内置多种编辑工具,可以轻松的完成地图生产全过程,为地图分析和处理提供了新的解决方…

PPT 生成整数序列字典序的r-组合算法

生成整数序列字典序的r-组合算法 一、PPT效果展示二、问题2.1 简述2.2 算法简述2.3 例子 三、PPT实现 一、PPT效果展示 二、问题 2.1 简述 给定一个整数序列 (1,2,3,…n),输出其所有字典序的r-组合,注意事项&#xf…

2023-09-14力扣每日一题

链接: 1222. 可以攻击国王的皇后 题意 皇后可以攻击与它在同一条线上的棋子(同行/同列/主副对角线),但是中途不能有遮挡 给定一个局面,多个皇后和一个国王,求有几个皇后能攻击到国王 解: …

关于wParam和lParam

在VC的函数参数中常出现WPARAM和LPARAM,这两个有什么特殊意义么?它们的含义是不是要事先定义? WPARAM和LPARAM一般在消息里面用的很多,其实没有特殊的含义的。 是两普通的变量 。 是怎样通过wParam,lParam传参数的呢?有时候表示点的坐标,有时表示…

QT子线程或自定义类操作访问主界面UI控件的几种方法

前言 QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: 将ui指针公开后直接访问 (1)例如有个自己定义的类CustomCl…

代码随想录训练营第52天|300.最长递增子序列,674.最长连续递增子序列,718.最长重复子序列

代码随想录训练营第52天|300.最长递增子序列,674.最长连续递增子序列,718.最长重复子序列 300.最长递增子序列文章思路代码 674.最长连续递增序列文章思路代码 718.最长重复子数组文章思路代码 总结 300.最长递增子序列 文章 代码随想录|0300.最长上升…

【Node.js操作SQLite指南】

Node.js操作SQLite指南 在本篇博客中,我们将学习如何在Node.js中操作SQLite数据库。我们将使用sqlite3模块来创建数据库、创建表以及进行数据的增删改查操作。 文章目录 Node.js操作SQLite指南安装sqlite3模块创建数据库创建表数据的增删改查插入数据查询数据更新…

【Redis】深入探索 Redis 的数据类型 —— 列表 List

文章目录 一、List 类型介绍二、List 类型相关命令2.1 LPUSH 和 RPUSH、LPUSHX 和 RPUSHX2.2 LPOP 和 RPOP、BLPOP 和 BRPOP2.3 LRANGE、LINDEX、LINSERT、LLEN2.4 列表相关命令总结 三、List 类型内部编码3.1 压缩列表(ziplist)3.2 链表(lin…

《向量数据库指南》——Milvus Cloud云原生分布式向量数据库的优势有哪些?

首先解释一下什么是分布式,什么是云原生。分布式的概念相对容易理解,就是系统的各个组件在不同的节点上进行协作和分工,以实现更大规模和更高性能的处理。而云原生并不仅仅指运行在 Kubernetes(K8s)上或在公有云上的服务。在我的理解中,分布式云原生意味着系统首先是一个…

【Java 基础篇】Java可变参数:灵活处理不定数量的方法参数

在Java编程中,可变参数是一项强大的功能,它允许你编写更加灵活的方法,接受不定数量的参数。本文将详细解释Java可变参数的用法、语法以及最佳实践。 什么是可变参数? 可变参数是Java 5引入的一项功能,它允许你在方法…

汇总selenium利用xpath等找网页节点的方法

一、通过子节点定位父节点&#xff0c;模拟建立一个test.html <!--子节点定位父节点--> <html> <body> <div id"A"><div>定位到这里1<div>定位到这里2<div>定位到这里3<div id"C">子节点</div><…

【Spring Boot自动装配】

Spring Boot启动的时候会通过EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类&#xff0c;并对其进行加载&#xff0c;而这些自动配置类都是以AutoConfiguration结尾来命名的&#xff0c;它实际上就是一个JavaConfig形式的Spring容器配置…

kafka事务的详解

一 kafka事务的机制 1.1 kafka的事务机制 通过事务机制&#xff0c;KAFKA 可以实现对多个 topic 的多个 partition 的原子性的写入&#xff0c;即处于同一个事务内的所有消息&#xff0c;不管最终需要落地到哪个 topic 的哪个 partition, 最终结果都是要么全部写成功&#xf…