Java时区TimeZone与操作系统时区不一致

别再让日志时间对不上了!Java项目部署时区问题保姆级排查与修复指南 本文详细解析了Java项目部署中常见的日志时间戳时区问题,提供了从操作系统、JVM、容器环境到日志框架的全链路排查与修复方案。针对服务器部署和Docker容器化场景,分别给出时区配置的最佳实践,帮助开发者彻底解决日志时间不一致问题,确保系统监控数据的准确性。 阅读详情

今天发现刚写的Java小工具的日期功能出了问题。具体时间慢了11个小时。

检查了XP系统的日期、时区以及注册表中的相关选项,均无问题。

运行下列代码

import java.util.TimeZone;
import java.util.Calendar;
public class Test{
    public static void main(String[] args) throws Exception {
        Calendar calendar = Calendar.getInstance();      
        System.out.println("目前时间:" + calendar.getTime());
        System.out.println("Calendar时区::" + calendar.getTimeZone().getID());
        System.out.println("user.timezone:" + System.getProperty("user.timezone"));
        System.out.println("user.country:" + System.getProperty("user.country"));
        System.out.println("默认时区:" + TimeZone.getDefault().getID());
    }
}
输出为:

-----------Output-----------  
目前时间:Thu Jan 22 04:50:19 BRT 2015
Calendar时区::America/Bahia
user.timezone:America/Bahia
user.country:CN
默认时区:America/Bahia
现在是15:50,足慢了11小时,时区居然是美国,但是国家却是中国。


用以获取Calendar实例后,使用setTimeZone()方法,把时区设为东八区,再次运行输出如下:

-----------Output-----------  
目前时间:Thu Jan 22 04:52:58 BRT 2015
Calendar时区::Asia/Shanghai
user.timezone:America/Bahia
user.country:CN
默认时区:America/Bahia
虽然Calendar中的时区虽然改成了东八区,但还是显示美国时间,国家依然在中国。

看来输出的时间跟默认时区相关。


删掉Calendar的setTimeZone()方法,修改TimeZone类中的默认时区:

import java.util.TimeZone;
import java.util.Calendar;
public class Test{
    public static void main(String[] args) throws Exception {
        System.setProperty("user.timezone","Asia/Shanghai");
        // 用下面的方法也可以,但是它并不会设置user.timezone属性。建议用上面的方法
        // TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
        Calendar calendar = Calendar.getInstance();
        System.out.println("目前时间:" + calendar.getTime());
        System.out.println("Calendar时区::" + calendar.getTimeZone().getID());
        System.out.println("user.timezone:" + System.getProperty("user.timezone"));
        System.out.println("user.country:" + System.getProperty("user.country"));
        System.out.println("默认时区:" + TimeZone.getDefault().getID());
    }
}

这时输出:

-----------Output-----------  
目前时间:Thu Jan 22 16:06:17 CST 2015
Calendar时区::Asia/Shanghai
user.timezone:Asia/Shanghai
user.country:CN
默认时区:Asia/Shanghai

谢天谢地,总算正常了。

问题的原因出在哪里?为什么我的Java默认时区是美国?Google之后发现许多人都遇到过这个Bug,一般都是由于JDK版本落后或者系统注册表中的时区有误造成的。但是我的系统设置并无问题,JDK版本是最新的1.8,难道是XP与JDK1.8之间有不合?

具体的TimeZone机制可以看这篇文章:

http://log-cd.iteye.com/blog/368238





CHI里的Error handling机制 本文讲解了CHI里的Error handling机制。 阅读详情

相关推荐

离散系统傅里叶变换的常用结论证明

本文介绍了离散系统傅里叶变换的三个重要结论:1)时域卷积对应频域相乘(公式1-3);2)时域相乘对应频域卷积(公式4-6);3)帕塞瓦尔定理(公式7)及其广义形式,证明信号能量在变换域保持不变。文末提供了MATLAB卷积运算演示程序,通过动画展示离散信号卷积过程(翻转、平移、相乘、累加),并以方波信号为例给出运行结果图。该程序直观呈现了卷积运算的步骤与结果。

newtton的博客 1302

时区设置为 Asia/Shanghai 后仍显示 GMT

【代码】时区设置为 Asia/Shanghai 后仍显示 GMT。

weixin_46031767的博客 1573

CS224W图神经网络实战:如何用Motifs和Graphlets分析社交网络结构?

本文基于斯坦福CS224W课程,深入探讨了如何利用网络模体(Motifs)和图元(Graphlets)分析社交网络的微观结构。通过实战代码演示,文章介绍了如何识别具有统计显著性的关键连接模式,计算节点的图元度向量以刻画局部拓扑特征,并将这些结构洞见应用于社区发现、影响力分析及图神经网络的节点特征工程,从而提升模型在虚假账号检测等任务中的性能。

2w3e4r5t6y的博客 911

java 获取系统的时区_【转】Java 获取操作系统时区

Java 可以通过 Timezone 获取时区,但是通过 Timezone 获取的时区是 JVM 初始化时保存的时区,并不是操作系统所设置的时区。当修改过操作系统的时区后,JVM 并不会同步更新。Timezone 获取时区的代码如下:// 获取 JVM 启动时获取的时区TimeZone.getDefault();// 获取任意指定区域的时区String[] zoneIDs = TimeZone.g...

weixin_33673142的博客 5248

《深入浅出图神经网络:GNN原理解析》学习笔记

期末考完了,该上道了 目录一、图的概述1.基本概念2.图的存储和遍历3.应用分类二、神经网络基础1.机器学习2.神经网络三、卷积神经网络(CNN)1.卷积与池化2.卷积神经网络四、表示学习1.意义2.自编码器五、图信号处理与图卷积神经网络1.矩阵计算前置知识2.图信号与图的拉普拉斯矩阵3.图傅里叶变换4.图滤波器(Graph Filter)5.图卷积神经网络(GCN) 一、图的概述 1.基本概念 1.顶点(Vertex)表示研究的对象,边(Edge)表示两个对象之间特定的研究关系 2.图为顶点和边的集合.

且视他人之疑目如盏盏鬼火,大胆地去走你的夜路 2049

[原创]Linux 802.11n CSI tool安装教程(亲测可用)

Linux 802.11n CSI tool安装教程 前言 网上关于Intel5300 CSI tool的教程繁多,实际有效的可以说极少,各种疏漏错误。装的时候被坑无数次,终于调通。其实装这个工具并不太难,但是很多人把它弄得极其复杂,所以写这篇博客来帮助和我有一样困扰的人。我基本沿用的是官方文档旧版本的安装方案,针对其冗杂之处做了大量改进。 旧版安装教程: http://dhalperi....

u014645508的博客 4万+

java timezone asia/shanghai_【转】Java时间比数据库时间早8小时,设置 serverTimezone=Asia/Shanghai...

前段时间把项目 SpringBoot 版本提高了,提高到了 2.1.7,之前版本不记得了。项目所有表都添加了 create_time 和 update_time 字段,并设置默认值为 CURRENT_TIMESTAMP。 有一天无意间发现网页上显示的时间,比如用户登录时间和数据库里显示不一样,页面上的早了几个小时。比如 当前时间是 2019-10-19 18:12:43,数据库时间也是 2019-...

weixin_28914869的博客 2377

3D模型文件格式全解析:从STL到glTF,10种主流格式与转换实战指南

在三维数字内容创作与工程制造领域,3D模型文件格式是数据交换与协作的基石。其核心原理在于以不同的数据结构(如三角网格、NURBS曲面、边界表示等)对三维物体的几何、外观及场景信息进行编码。理解这些格式的技术特性,对于保障数据完整性、提升工作流效率具有关键价值,广泛应用于3D打印、游戏开发、影视动画及工业设计等场景。例如,面向增材制造的STL格式以其极简的三角面片结构成为行业通用语,而支持丰富材质与动画的FBX格式则在影视游戏管线中扮演核心角色。本文聚焦于STL、OBJ、FBX、3MF、STEP等10种主流格

weixin_28520495的博客 356

Java中各国时区的写法

java区域时区

shengjiaxin的博客 8471

开源工具对比:5款主流大数据脱敏框架评测

数据脱敏(Data Masking/Anonymization),也称为数据漂白、数据去标识化,是指在不影响数据可用性的前提下,通过一定的技术手段对敏感信息进行处理,使其无法被识别或关联到具体个人或实体的过程。当应用程序向数据库写入数据(INSERT/UPDATE)时,ShardingSphere 会拦截 SQL,对配置了脱敏规则的字段,使用指定的算法进行加密/脱敏处理,然后将处理后的数据写入到。如果你的答案是“是”,那么数据脱敏,尤其是针对海量数据的。好的,各位技术同仁,数据安全领域的探索者们,大家好。

小程序开发 1184

《派出你的AI同事:WorkBuddy案例实战》055:客服工单自动分类与话术生成

客服工单自动分类与话术生成 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 283

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

造成这种问题的原因可能是:你的操作系统时区跟你JVM的时区不一致。 你的操作系统应该是中国的时区吧,而JVM的时区不一定是中国时区,你在应用服务器的Java虚拟机添加如下配置:  -Dfile.encoding=UTF8     -Duser.timezone=GMT+08

JEECG官方博客 3251

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Linux系统时间和java的时间不一致

原因:操作系统时区跟JVM的时区不一致 解决: 启动java时配置参数-Duser.timezone=GMT+8 在程序中设定时区 配置Linux时区/etc/sysconfig/clock (jre从这里获取时区信息) ZONE="Asia/Shanghai" UTC=false ARC=false ...

我的博客 749

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

web系统时区不一致导致时间显示异常的解决方案

先说一下场景,一般在国内,我们都用的东八区时间,部署系统的时候,操作系统的时区也会初始化为

schzrj的专栏 4605

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java程序与操作系统时区不一致问题的处理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33736649的博客 3099

Java 获取操作系统时区

Java 可以通过 Timezone 获取时区,但是通过 Timezone 获取的时区是 JVM 初始化时保存的时区,并不是操作系统所设置的时区。当修改过操作系统的时区后,JVM 并不会同步更新。Timezone 获取时区的代码如下: // 获取 JVM 启动时获取的时区 TimeZone.getDefault(); // 获取任意指定区域的时区 String[] zoneID...

zhaoxj_2017的博客 2万+

Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat

一、概述 1、问题描述 使用Java处理时间时,我们可能会经常发现时间不对,比如相差8个小时等等,其真实原因便是TimeZone。只有正确合理的运用TimeZone,才能保证系统时间无论何时都是准确的。由于我在外企工作,服务器在美国,美国也有很多时区,经常会碰到向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于西八区(GMT-8:00),而身处东八区的用户想要查询当天的销售记录。则需把东八区的“今天”这个时间范围转换为服务器所在时区的时间范围。 2、时区认识 ...

lyb3290的博客 1969

Java时区与MySQL时区不一致导致的时间不一致问题分析

中说到:MySQL 服务使用的时区会受到 jdbc 参数的影响,也就是说可能会出现:实际的数据库时区与 jdbc 参数声明的时区是不一样的。根据源代码的实现可以发现一个规律:都是先将日期根据所属时区转换为时间戳后,在根据需要转换的时区转换为最终日期。,那么表达的意义也不一样,就如北京八点与美国八点的区别。对于 Date 类型字段值的处理:将Java程序时区下的日期的时间戳,转为MySQL服务时区下的日期(对于 Date 类型字段的处理:将MySQL服务时区下的日期的时间戳,转为Java程序时区下的日期。

qq_38074398的博客 2273

java timezone_详解Java中的时区类TimeZone的用法

一、TimeZone 简介TimeZone 表示时区偏移量,也可以计算夏令时。在操作 Date, Calendar等表示日期/时间的对象时,经常会用到TimeZone;因为不同的时区,时间不同。下面说说TimeZone对象的 2种常用创建方式。1.获取默认的TimeZone对象使用方法:TimeZone tz = TimeZone.getDefault()2.使用 getTimeZone(Stri...

weixin_42485891的博客 8558

Java不同时区(timezone)之间时间转换

最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间。 一、关于时区的一些概念 1.1 什么是时区? timezone,即由于世界各国家与地区经度不同,地方时也有所不同,按照经度将全球划分为24个时区。 时区有相应的英文字母缩写,例如GMT,UTC,CST等,常见的时区,具体...

杨博东的博客 4万+

详解Java中的时区类TimeZone的用法

最好的方法是确保JAVA虚拟机(JVM)的默认时区类是正确的,并且适合您的语言环境。时区可以用来获取或者规定时区,也可以用来计算时差,这里我们就来详解Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)中的时区类时区的用法,特别要注意下面所提到的时区相关的时间校准问题。如果没有可用的时区ID,那么您可以创建一个自定义时区,并使用java.util.TimeZone类的setDefault方法将其设置为默认时区——就像我前面在Initializer类中所做的那样。

fmz2222的博客 9953

java calendar 设置时区_详解Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat

一、概述1、问题描述使用Java处理时间时,我们可能会经常发现时间不对,比如相差8个小时等等,其真实原因便是TimeZone。只有正确合理的运用TimeZone,才能保证系统时间无论何时都是准确的。由于我在外企工作,服务器在美国,美国也有很多时区,经常会碰到向处于不同时区的服务器发请求时需要考虑时区转换的问题。譬如,服务器位于西八区(GMT-8:00),而身处东八区的用户想要查询当天的销售记录。则...

weixin_28862501的博客 5112
上一篇: 统计指定目录下Java源代码的总行数
下一篇: Java中用Class.getResource把图片自动打包进Jar
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值