在Windows XP计算机上使用Java 6 update 30。无法更新Java或Windows。
我需要一种方法将内部Java时钟改回一小时以匹配系统时间。该机器在俄罗斯和Windows系统时间是正确的,但Java时间关闭了一个小时,可能是由于DST。
我已尝试changing JVM parameters以及修改deployment.properties文件(更改时区),向环境/系统变量路径添加变量也不起作用,并尝试timezone updater tool由Oracle提供。前三个不更改任何参数,更新程序工具崩溃,并说“找不到JRE / JDK文件”。
还有其他方法可以永久/正确地更改Java使用的时间。
例如: 当前时间:7:20:17 PM TimeZone:sun.util.calendar.ZoneInfo [id =“Europe / Moscow”,offset = 14400000,dstSavings = 0,useDaylight = false,transitions = 78,LastRule = null]
所需时间:下午6:20:17 TimeZone:sun.util.calendar.ZoneInfo [id =“Europe / Moscow”,偏移= 14400000,dstSavings = 0,useDaylight = false,transitions = 78,LastRule = null]
答案 0 :(得分:0)
作为前两个选项 - 升级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
答案 1 :(得分:0)
尝试从Glassfish Java Server获取当前时间并收到错误的时间戳时出现此问题。要更改时区,必须找到domain.xml文件并添加新时区。
答案 2 :(得分:0)
ZonedDateTime.now(
ZoneId.of( "Europe/Moscow" )
)
Java 6 Update 30随Olson时区数据版本2011l一起提供。仅供参考,Olson数据库现在称为Update Release Notes或'tzdata'。
从那时起,俄罗斯的时区定义经历了多次变化。这使得Java安装过时了。因此,您必须更新时区数据库或使用替代方案。
你说你试过但未能更新时区数据。
另一种选择是来自java.time类的大部分技术的后端,现在它取代了麻烦的旧日期时间类,如Date
和Calendar
。那些旧课程现在已经遗留下来,应该避免。后端位于‘tz database’项目中,并带有自己的tzdb
副本。您可以将此库添加到项目中,并根据需要将其替换为tzdata的未来更新。请参阅ThreeTen-Backport。顺便说一下," ThreeTen"是指documentation to update tzdb。
因此,出于Java代码的目的,您不关心主机操作系统自己的时区数据是否已过时,因为我们没有使用它。同样,对于JVM自己的时区数据,我们没有使用它。通过仅使用ThreeTen-Backport类,我们使用作为该库的一部分提供的时区数据。我们可以轻松地保持时区数据的新鲜度。
Instant
JSR 310类代表Instant
中时间轴上的一个时刻,分辨率为UTC(小数部分最多九(9)位)。
Instant instant = Instant.now();
instant.toString():2017-01-16T07:43:24.130Z
ZonedDateTime
应用ZoneId
获取代表特定区域nanoseconds的ZonedDateTime
对象。
ZoneId z = ZoneId.of( "Europe/Moscow" );
ZonedDateTime zdt = instant.atZone( z );
zdt.toString():2017-01-16T10:43:24.130 + 03:00 [欧洲/莫斯科]
作为快捷方式,您可以跳过处理Instant
,并致电ZonedDateTime.now( z )
。
请参阅wall-clock time。
问题:...是否还有其他方法可以永久/正确地更改Java使用的时间
始终传递特定的ZoneId
而不是省略任何可选的时区参数。省略时,您隐式依赖于JVM的当前默认时区。可以随时通过JVM中任何应用程序的任何线程中的任何代码更改该默认值。因此,我强烈建议您明确 始终指定所需/预期的时区。
live code in IdeOne.com框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacy,java.util.Date
和& Calendar
现在位于SimpleDateFormat
的Joda-Time项目建议迁移到maintenance mode类。
要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial。
从哪里获取java.time类?