Java JVM时区关闭一小时
在Windows XP计算机上使用Java 6 update 30。更新Java或Windows不是一个选项 我需要一种方法将内部Java时钟向后更改一小时以匹配系统时间。机器在俄罗斯,Windows系统时间正确,但Java时间缩短了一个小时,可能是因为DST 我尝试过修改deployment.properties文件(以更改时区),将变量添加到环境/系统变量路径也不起作用,并尝试了Oracle提供的方法。前三个没有改变任何参数,更新工具崩溃,并说“找不到JRE/JDK文件” 有没有其他方法可以永久/正确地更改Java使用的时间 例如: 当前时间:下午7:20:17时区:sun.util.calendar.ZoneInfo[id=“欧洲/莫斯科”,偏移量=14400000,DSTSAVAINGS=0,useDaylight=false,transitions=78,LastRule=null]Java JVM时区关闭一小时,java,datetime,jvm,hour,Java,Datetime,Jvm,Hour,在Windows XP计算机上使用Java 6 update 30。更新Java或Windows不是一个选项 我需要一种方法将内部Java时钟向后更改一小时以匹配系统时间。机器在俄罗斯,Windows系统时间正确,但Java时间缩短了一个小时,可能是因为DST 我尝试过修改deployment.properties文件(以更改时区),将变量添加到环境/系统变量路径也不起作用,并尝试了Oracle提供的方法。前三个没有改变任何参数,更新工具崩溃,并说“找不到JRE/JDK文件” 有没有其他方法可以
所需时间:下午6:20:17时区:sun.util.calendar.ZoneInfo[id=“Europe/Moscow”,offset=14400000,dstsavage=0,useDaylight=false,transitions=78,LastRule=null]由于您的前两个选项(升级JVM和使用tzupdater)是不可能的,因此您必须使用变通方法。您可以使用
user.timezone
属性设置JVM的默认时区。您需要将时区设置为距离实际时区一小时的时区,以补偿2014年的更改
俄罗斯时区可用
Europe/Kaliningrad
Europe/Moscow
Europe/Samara
Europe/Volgograd
Asia/Yekaterinburg
Asia/Novokuznetsk
Asia/Novosibirsk
Asia/Omsk
Asia/Krasnoyarsk
Asia/Irkutsk
Asia/Yakutsk
Asia/Sakhalin
Asia/Vladivostok
Asia/Anadyr
Asia/Kamchatka
Asia/Magadan
当试图从Glassfish Java服务器获取当前时间并收到错误的时间戳时,会出现此问题。要更改时区,必须找到domain.xml文件并添加新时区
date
和Calendar
。这些旧类现在是遗留的,应该避免。在项目中可以找到后端端口,它携带自己的tzdb
副本。您可以将此库添加到项目中,并根据需要将其替换为tzdata的未来更新。看。顺便说一下,“三个十”指的是
因此,就Java代码而言,您并不关心主机操作系统自己的时区数据是否过期,因为我们没有使用它。对于JVM自己的时区数据也是如此,我们没有使用它。通过只使用三个Backport类,我们使用作为该库的一部分提供的时区数据。我们可以很容易地保持时区数据的新鲜
Instant
该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)
instant.toString():2017-01-16T07:43:24.130Z
ZoneDateTime
应用ZoneId
以获取表示特定区域的时间的zoneDateTime
对象
ZoneId z = ZoneId.of( "Europe/Moscow" );
ZonedDateTime zdt = instant.atZone( z );
zdt.toString():2017-01-16T10:43:24.130+03:00[欧洲/莫斯科]
作为快捷方式,您可以跳过处理即时
,然后调用ZoneDateTime.now(z)
看
指定时区
问题:…有没有其他方法可以永久/正确地更改Java使用的时间
始终传递特定的ZoneId
,而不是忽略任何可选时区参数。省略时,您隐式地依赖于JVM的当前默认时区。JVM中任何应用程序的任何线程中的任何代码都可以随时更改该默认值。因此,我强烈建议您始终明确指定所需/预期时区
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
时区对象有任何差异。如果问题出在时区上,那么应该会有一些不同。你是对的,你需要更新你的时区文件,因为俄罗斯时间在去年发生了变化。因此,您需要找出使用tzupdater的错误。你到底是如何运行它的?结果是什么?当我运行tzupdater工具时,我得到的唯一输出是找不到JRE/JDK文件。该工具似乎只适用于linux机器,因为它必须使用make。Java使用tzdata,但不使用tzcode。它使用自己的时区信息格式,因此需要tzupdater之类的工具。
Instant instant = Instant.now();
ZoneId z = ZoneId.of( "Europe/Moscow" );
ZonedDateTime zdt = instant.atZone( z );