如何使用Java获取macOS(以前称为Mac OS X和OS X)上的时区信息?
TimeZone类用于Java中的时区。要获取系统的默认时区,您可以使用静态getDefault
方法。
br
ZoneId
.of( "Africa/Tunis" )
.getRules()
.isDaylightSavings(
Instant.now()
)
java.time
现代的解决方案使用java。time类取代了可怕的遗留日期时间类:ZoneId
、ZoneOffset
和ZoneRules
。
你问:
如何在Mac OS X上使用Java获取时区信息?
在Mac上通过Java获取时区信息,方法与在其他主机操作系统上相同。
ZoneId
定义感兴趣的时区。请指定合适的时区名称,格式为Continent/Region
,如America/Montreal
、Africa/Casablanca
或Pacific/Auckland
。永远不要使用2-4个字母的缩写,如EST
或IST
,因为它们是不是真正的时区,不是标准化的,甚至不是唯一的(!)。
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 8, Java SE 9, Java SE 10, Java SE 11,以及更高版本-标准Java API的一部分,捆绑实现。
- Java 9带来了一些小的特性和修复。
- Java SE 6和Java 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…。