java.time.ZoneOffset教程与实例

642 阅读2分钟

java8 ZoneOffset类

ZoneOffset类在java.time包中声明,在java8中作为日期时间API增强的一部分引入。它用于表示与UTC时区的偏移量,偏移量返回与UTC时区相差的小时/分钟。

时区是地球上的一部分,就像一组或单个国家,它们都遵循标准时间。

每个时区包含两个属性:

  • id - 亚洲/卡尔卡塔
  • offset - 与UTC/格林威治的时差或偏移 - 例子是+05:30

特点

  • 它是不可变的,一旦实例被创建,就不能修改实例的状态。
  • 在多线程环境下,它是线程安全的。
  • 它是基于值的类,当这个类使用===操作符检查重复的或相同的实例时,会得到不一致的结果,而且行为是特定于JVM的。

类的特征

public final class ZoneOffset  
        extends ZoneId  
        implements TemporalAccessor, TemporalAdjuster, Comparable, Serializable 

它扩展了ZoneId类,ZoneId类表示时区标识,如欧洲/巴黎。

使用实例

它有of()、ofHours()、ofHoursMinutes()、ofHoursMinutesSeconds()方法用于创建ZoneOffset实例。

ZoneOffset zonedOffsetUtc = ZoneOffset.UTC;  
ZoneOffset zonedOffsetMin = ZoneOffset.MIN;  
ZoneOffset zonedOffsetMax = ZoneOffset.MAX;  
System.out.println(zonedOffsetUtc);  
System.out.println(zonedOffsetMin);  
System.out.println(zonedOffsetMax);  
ZoneOffset zoneOffSet = ZoneOffset.ofHours(5);  
System.out.println(zoneOffSet);  

Z代表时区与UTC时区的偏移量 如何将ZoneId转换为ZoneOffset 当处理时区转换时,Instance是一个正确的转换实例,因为它可以提供正确的信息。

  
Instant instantObject = Instant.now();   
ZoneId systemDefaultZone = ZoneId.systemDefault();   
ZoneOffset myzoneoffset = systemDefaultZone.getRules().getOffset(instantObject);  
System.out.println(myzoneoffset);  

如何将ZoneOffset转换为ZoneId

java.time.ZoneId类有一个ofOffset方法,可以从zoneOffset和前缀创建ZoneId。

public static ZoneId ofOffset(String prefix,   ZoneOffset offset)  

下面的代码是offset方法的一个用法

ZoneId zoneId = ZoneId.ofOffset("GMT",ZoneOffset.UTC);  
System.out.println(zoneId); //GMT  

为了获得偏移值,首先,你需要创建一个比LocalDateTime更快的实例。LocalDateTime将只提供最佳的偏移量 要获得我的本地系统偏移量,你必须使用ZoneId.systemDefault()--这将提供我的系统默认时区(ZoneId.systemDefault()) 接下来是获得时区规则,使用当前偏移量获得时区偏移量(Instant.now()) 这将提供与UTC时区差的小时/分钟数。

System.out.println(ZoneId.systemDefault().getRules().getOffset(Instant.now())); // +05:30  

方法

方法

说明

adjustInto(Temporal temporal)

用参数对象的相同偏移量调整调用者的偏移量。

getId()

返回偏移量ID,即Z

get(TemporalField field)

从一个偏移量返回Int值的字段

getLong()

将偏移量中的字段以Long值的形式返回

of(String offsetId)

它用于创建一个有ID的ZoneOffset对象。

ofHours(int hours)

用于创建一个带有偏移小时的ZoneOffset对象。

ofHoursMinutes(int offsetHours,int offsetMinutes)

它用于创建一个带有偏移小时和分钟的ZoneOffset对象。

ofHoursMinutesSeconds(int hours, int minutes, int seconds)

它用于创建一个带有偏移小时、分钟和秒的ZoneOffset对象。

ofTotalSeconds(int totalSeconds)

它用于创建一个具有总秒数的ZoneOffset对象。

range(TemporalField field)

它用于使用Temporal字段的值的范围。