什么是java8中的ZoneOffset类?
ZoneOffset类定义在java.time
包中,在java8中作为日期时间API增强的一部分引入。
它用于表示offset
,从UTC
时区和Offset返回与UTC时区的小时/分钟差。
时区是地球上的一部分,就像一组或单个国家,它们都遵循标准时间。
每个时区包含两个属性:
- id - 亚洲/卡尔卡塔
- offset - 与UTC/Greenwich的时差或偏移 - 例子是+05:30
ZoneOffset的特点
- 它是不可变的,一旦实例被创建,就不能修改实例的状态。
- 在多线程环境下,它是线程安全的。
- 它基于一个基于值的类,当这个类使用===操作符检查重复或相同的实例时,会给出不一致的结果,而且行为是特定于JVM的。
类的特征
public final class ZoneOffset
extends ZoneId
implements TemporalAccessor, TemporalAdjuster, Comparable, Serializable
它扩展了ZoneId
类,该类表示时区标识,如欧洲/巴黎。
使用实例
它有of()、ofHours()、ofHoursMinutes()、ofHoursMinutesSeconds()方法来创建ZoneOffset实例。
import java.time.ZoneOffset;
public class Test {
public static void main(String[] args) {
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
-18:00
+18:00
+05:00
Z代表一个从UTC出发的时区偏移。
如何在java8中把ZoneId转换为ZoneOffset?
当处理时区转换时,Instance是一个正确的转换实例,因为它可以提供正确的信息。
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
public class Test {
public static void main(String[] args) {
Instant instantObject = Instant.now();
ZoneId systemDefaultZone = ZoneId.systemDefault();
ZoneOffset myzoneoffset = systemDefaultZone.getRules().getOffset(instantObject);
System.out.println(myzoneoffset);
}
}
如何在java8中把ZoneOffset转换为ZoneId?
java.time.ZoneId类有ofOffset方法,可以从zoneOffset
,并创建ZoneId
。prefix
下面是一个语法
public static ZoneId ofOffset(String prefix, ZoneOffset offset)
下面的代码是Offset方法的用法
import java.time.ZoneId;
import java.time.ZoneOffset;
public class Test {
public static void main(String[] args) {
ZoneId zoneId = ZoneId.ofOffset("GMT",ZoneOffset.UTC);
System.out.println(zoneId); //GMT
}
}
以下是获得偏移值的步骤:
- 首先,你需要创建一个LocalDateTime的实例。
- LocalDateTime将只给出最佳的可用偏移量。
- 要获得我的本地系统偏移量,你必须使用ZoneId.systemDefault()--这将给出我的系统默认时区(ZoneId.systemDefault()
- 下一步,是使用当前的偏移量(Instant.now())来获得时区规则,从而获得时区偏移量。
- 这就给出了与UTC时区差异的小时/分钟偏移数
import java.time.Instant;
import java.time.ZoneId;
public class Test {
public static void main(String[] args) {
System.out.println(ZoneId.systemDefault().getRules().getOffset(Instant.now())); // +05:30
}
}
ZoneOffset方法
方法 | 说明 |
---|---|
adjustInto(Temporal temporal) | 用参数对象的相同偏移量调整调用者的Offset。 |
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字段的值的范围。 |
总结
通过以下例子学习ZoneOffset类教程
- 如何在java8中把ZoneOffset转换为ZoneId?
- 如何从UTC时区获取偏移值?
- 如何在java8中把ZoneId转换为ZoneOffset?
- 方法