java date 设置时区,Java 日期时区

Java日期时区

ZoneOffset表示与UTC时区偏移的固定区域。

ZoneOffset不跟踪由夏令时导致的区域偏移的更改。

ZoneOffset类声明三个常量:UTC

MAX

MIN

UTC是UTC的时区偏移常量。

MAX和MIN是最大和最小支持的区域偏移。

Z用作UtC时区的区域偏移指示符。

我们可以用小时,分钟和秒的组合创建ZoneOffset。import java.time.ZoneOffset;

public class Main {

public static void main(String[] args) {

ZoneOffset zoneOffset1 = ZoneOffset.ofHours(-1);

System.out.println(zoneOffset1);

ZoneOffset zoneOffset2 = ZoneOffset.ofHoursMinutes(6, 30);

System.out.println(zoneOffset2);

ZoneOffset zoneOffset3 = ZoneOffset.ofHoursMinutesSeconds(9, 30, 45);

System.out.println(zoneOffset3);

}

}

上面的代码生成以下结果。

8a7e313fc82181484fac569712662bfc.png

例2

以下代码显示如何从偏移创建区域偏移。import java.time.ZoneOffset;

public class Main {

public static void main(String[] args) {

ZoneOffset zoneOffset1 = ZoneOffset.of("+05:00");

ZoneOffset zoneOffset2 = ZoneOffset.of("Z"); // Same as ZoneOffset.UTC System.out.println(zoneOffset1);

System.out.println(zoneOffset2);

}

}

上面的代码生成以下结果。

b854a8b927fb3b2f0da6bb94b0f09289.png

例3

以下代码从ZoneOffset输出常量值。import java.time.ZoneOffset;

public class Main {

public static void main(String[] args) {

System.out.println("ZoneOffset.UTC: " + ZoneOffset.UTC);

System.out.println("ZoneOffset.MIN: " + ZoneOffset.MIN);

System.out.println("ZoneOffset.MAX: " + ZoneOffset.MAX);

}

}

上面的代码生成以下结果。

f3db6c9f1f4c60dca5aeeff74ec8f944.png

注意

Java Date-Time API支持以小时,分钟和秒为单位的区域偏移量。

来自ZoneOffset的compareTo()允许我们比较两个区域偏移。

+1:30的区域偏移在+1:00的区域偏移之前。

Java Date-Time API支持-18:00到+18:00之间的区域偏移。

ZoneId

ZoneId表示区域偏移及其用于更改区域偏移的规则夏令时。

ZoneOffset表示从UtC时区偏移的固定区域,而ZoneId表示可变区偏移。

这些更改是由时区规则定义的。

时区ID

每个时区都有一个ID,可以用三种格式定义:在区域偏移中,可以是“Z”,“+ hh:mm:ss”或“-hh:mm:ss”,例如“+01:00”。

前缀为“UTC”,“GMT”或“UT”,后跟区域偏移量,例如“UTC + 01:00”。

在区域名称中,例如,“美洲/芝加哥”。

以下代码显示如何使用of()工厂方法创建ZoneId。import java.time.ZoneId;

public class Main {

public static void main(String[] args) {

ZoneId usChicago = ZoneId.of("America/Chicago");

System.out.println(usChicago);

ZoneId fixedZoneId = ZoneId.of("+01:00");

System.out.println(fixedZoneId);

}

}

上面的代码生成以下结果。

74ca1b095f86404f802276c14943154e.png

例4

ZoneId中的getAvailableZoneIds()返回所有已知时区ID。import java.time.ZoneId;

import java.util.Set;

public class Main {

public static void main(String[] args) {

Set zoneIds = ZoneId.getAvailableZoneIds();

for (String zoneId: zoneIds) {

System.out.println(zoneId);

}

}

}

上面的代码生成以下结果。

039db5d2a6f15ad289bae6c18e25395b.png

ZoneRules

ZoneRules跟踪区域偏移如何变化。

下面的代码显示了如何使用ZoneRules以获取有关ZoneId的时间偏移和时间更改的信息。import java.time.LocalDateTime;

import java.time.ZoneId;

import java.time.ZoneOffset;

import java.time.zone.ZoneOffsetTransition;

import java.time.zone.ZoneRules;

import java.util.List;

public class Main {

public static void main(String[] args) {

LocalDateTime now = LocalDateTime.now();

ZoneId usChicago = ZoneId.of("America/Chicago");

System.out.println("Zone ID: " + usChicago.getId());

ZoneRules rules = usChicago.getRules();

System.out.println("isFixedOffset(): " + rules.isFixedOffset());

ZoneOffset offset = rules.getOffset(now);

System.out.println("Zone offset: " + offset);

List transitions = rules.getTransitions();

System.out.println(transitions);

}

}

上面的代码生成以下结果。

1dbf352395b783d2f7c039e6c6b0888d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值