如何在Java1.6中正确处理时区和夏令时
我们有一个遗留系统,Java 1.6仍然没有升级,但夏令时没有正确实现。我的问题是,在Java1.6中,我们如何正确处理时区和夏令时如何在Java1.6中正确处理时区和夏令时,java,timezone,save,dst,Java,Timezone,Save,Dst,我们有一个遗留系统,Java 1.6仍然没有升级,但夏令时没有正确实现。我的问题是,在Java1.6中,我们如何正确处理时区和夏令时 任何人都可以在这里分享经验。Oracle有一个特殊的实用程序,可以使用实际的时区信息更新旧版本的JDK和JRE。它被称为,并且与Java1.6完全兼容。您可以在运行时更新DST和时区信息 java -jar tzupdater.jar 请记住,如果您的应用程序是可分发的,它将从用户JDK/JRE获取时区信息。否则会有所帮助。避免遗留日期时间类 与最早版本的Jav
任何人都可以在这里分享经验。Oracle有一个特殊的实用程序,可以使用实际的时区信息更新旧版本的JDK和JRE。它被称为,并且与Java1.6完全兼容。您可以在运行时更新DST和时区信息
java -jar tzupdater.jar
请记住,如果您的应用程序是可分发的,它将从用户JDK/JRE获取时区信息。否则会有所帮助。避免遗留日期时间类
与最早版本的Java捆绑在一起的旧日期时间类被证明是设计拙劣、混乱和麻烦的。避开它们。它们现在被内置在Java8中的类所取代
三百一十个后场
在项目中,java.time的大部分功能都被移植到了Java6和Java7中。将该库添加到Java 6应用程序中
认为这是一个真实的时间。忘掉你自己的时区吧。将UTC用于大部分业务逻辑、日志记录、数据存储和数据交换。通常仅为向用户演示应用时区
该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)。Instant
是java.time的基本构建块
Instant instant = Instant.now(); // UTC
应用时区。自动为您处理。务必阅读文档以了解行为
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
要了解更多信息,请在堆栈溢出中搜索这些类名以及ZoneOffset
、OffsetDateTime
和DateTimeFormatter
更新tzdata
世界各地时区的定义经常变化,令人惊讶的是变化频繁。而且经常在没有任何预警的情况下发生。(亲爱的政治家们,谢谢你们。)
tzdata
三个后端口
ThreeTen Backport库包含其自己的。Three Ten Backport库偶尔会更新为tzdata
的新副本。但有时你可能关心的时区可能会在最后一分钟更新。在这种情况下,您需要自己在Three-Ten Backport中更新数据。请参阅此页:
JVM中的tzdata
顺便说一下,JVM也有tzdata的副本。您可能希望对尚未更新到Three Ten Backport的旧代码保持最新。见神谕
操作系统中的tzdata
您的操作系统也可能有自己的tzdata副本。您可能还需要对所有其他非Java软件进行更新
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到java.time
Instant instant = Instant.now(); // UTC
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门针对Android采用了Three Ten Backport(如上所述)
- 看