如何使用Java获取Mac OS X上的时区信息?
答案 0 :(得分:3)
TimeZone类用于Java中的时区。要获取系统的默认时区,可以使用静态getDefault
方法。
答案 1 :(得分:1)
ZoneId
.of( "Africa/Tunis" )
.getRules()
.isDaylightSavings(
Instant.now()
)
现代解决方案使用 java.time 类代替了可怕的旧式日期时间类:ZoneId
和ZoneOffset
和ZoneRules
。
您问:
如何使用Java在Mac OS X上获取时区信息?
在Mac上通过Java获取时区信息的方式与在任何其他主机OS上一样。
ZoneId
定义感兴趣的时区。以Continent/Region
的格式指定proper time zone name,例如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 ) ;
询问当时该区域中的夏令时(DST)是否有效。
boolean isDst = rules.isDaylightSavings( instant ) ;
您还可以要求该区域中的上一个和下一个过渡,以及更多。
请注意,macOS拥有自己的tzdata数据副本,用于定义时区。 Apple的操作系统更新包括新副本。如果您感兴趣的区域正在变化,请确保您是最新的。此macOS副本会影响大多数不基于Java的应用程序。
Java Virtual Machine (JVM)包含自己的 tzdata 。同样,如果您感兴趣的时区在变化,请确保您使用的所有JVM都已更新。 Java更新包括新鲜的 tzdata 。但是政客们真的很喜欢改变时区,通常很少或根本没有预警。因此,您可能需要手动更新JVM的 tzdata 文件。并且请确保更新已安装的所有JVM,以及与正在使用的任何基于Java的应用程序捆绑在一起的所有JVM。
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规范为JSR 310。
Joda-Time项目(现在位于maintenance mode中)建议迁移到java.time类。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。 Hibernate 5和JPA 2.2支持 java.time 。
在哪里获取java.time类?