如何使用Java获取macOS上的时区信息?



如何使用Java获取macOS(以前称为Mac OS XOS X)上的时区信息?

TimeZone类用于Java中的时区。要获取系统的默认时区,您可以使用静态getDefault方法。

br

ZoneId
.of( "Africa/Tunis" ) 
.getRules()
.isDaylightSavings​( 
    Instant.now() 
)

java.time

现代的解决方案使用java。time类取代了可怕的遗留日期时间类:ZoneIdZoneOffsetZoneRules

你问:

如何在Mac OS X上使用Java获取时区信息?

在Mac上通过Java获取时区信息,方法与在其他主机操作系统上相同。

ZoneId

定义感兴趣的时区。请指定合适的时区名称,格式为Continent/Region,如America/MontrealAfrica/CasablancaPacific/Auckland。永远不要使用2-4个字母的缩写,如ESTIST,因为它们是不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;

ZoneRules

获取该区域的规则。这些规则包括该特定地区的人们使用的偏移量的过去、现在和未来变化的历史。

ZoneRules rules = z.getRules() ;

查询在任何特定时刻生效的规则。让我们使用当前时刻来演示。

Instant instant = Instant.now() ;  // Capture the current moment.

ZoneOffset

获取该区域当前正在使用的偏移量。偏移量仅仅是在UTC(本初子午线)之前或之后的小时-分钟-秒数。

ZoneOffset offset = rules.getOffset( instant ) ;

夏令时

询问该地区在该时刻是否实行夏令时

boolean isDst = rules.isDaylightSavings​( instant ) ;

您还可以询问该区域的前一个和下一个转换,以及更多。

tzdata

请注意,macOS有自己的tzdata数据副本来定义时区。苹果的操作系统更新包括新版本。如果你感兴趣的领域发生了变化,确保你的简历是最新的。此macOS副本影响大多数非基于java的应用程序。

Java虚拟机(JVM)包含自己的tzdata。同样,如果您感兴趣的时区正在更改,请确保您使用的所有jvm都已更新。Java更新包括fresh tzdata。但政客们真的喜欢改变时区,通常很少或根本没有预警。因此,您可能需要手动更新JVM的tzdata文件。确保你已经安装的jvm以及你正在使用的任何基于java的应用程序绑定的jvm都要更新。


<标题>对 java.time

java。time框架内置于Java 8及以后版本中。这些类取代了麻烦的旧的遗留日期时间类,如java.util.Date, Calendar, &SimpleDateFormat .

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获得许多示例和解释。规格为JSR 310。

Joda-Time项目,现在处于维护模式,建议迁移到java。时间类。

可以交换java。Time 直接与数据库关联。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java.sql.*类。Hibernate 5 &JPA 2.2支持java.time.

从哪里获取java。时间类?

  • Java SE 8Java SE 9Java SE 10Java SE 11,以及更高版本-标准Java API的一部分,捆绑实现。
    • Java 9带来了一些小的特性和修复。
  • Java SE 6Java SE 7
    • 大多数java。time功能向后移植到Java 6;7在 ThreeTen-Backport
  • Android
    • 更高版本的Android(26+)捆绑实现的java。时间类。
    • 对于早期的Android (<26),一个被称为API的进程对进行解糖,带来java的一个子集。time功能最初不是Android内置的。
      • 如果desugaring不提供你需要的,ThreeTenABP项目适应ThreeTen-Backport(如上所述)到Android。参见如何使用ThreeTenABP…

相关内容

  • 没有找到相关文章

最新更新