文
章
目
录
章
目
录
学习将给定的日期时间对象从一个时区转换为另一个时区。我们将看到使用ZonedDateTime、Date和Calendar类的示例。
1.更改ZonedDateTime的时区
在Java 8中,带时区信息的日期和时间用ZonedDateTime表示。要将ZonedDateTime实例从一个时区转换为另一个时区,请遵循以下两个步骤:
- 在第一个时区中创建 ZonedDateTime。您的应用程序中可能已经有了它。
- 使用withZoneSameInstant()方法将第一个ZonedDateTime转换为第二个时区。
ZonedDateTime instant = ZonedDateTime.now();
System.out.println(instant);
ZonedDateTime instantInUTC = instant.withZoneSameInstant(ZoneId.of("UTC"));
System.out.println(instantInUTC);
程序输出。
2023-10-31T14:25:09.988+08:00[Asia/Shanghai]
2023-10-31T06:25:09.988Z[UTC]
2.更改OffsetDateTime的时区
类似于ZonedDateTime,OffsetDateTime也表示通用时间线中的瞬间,在ISO-8601日历系统中与UTC/格林威治有偏移。要将OffsetDateTime实例从一个时区转换为另一个时区,请遵循以下两个步骤:
- 在第一个时区中创建OffsetDateTime。您可能已经在您的应用程序中拥有它。
- 使用withOffsetSameInstant()方法将第一个OffsetDateTime转换为第二时区。
OffsetDateTime now = OffsetDateTime.now();
System.out.println(now);
OffsetDateTime nowInUTC = now.withOffsetSameInstant(ZoneOffset.of( "+00:00" ));
System.out.println(nowInUTC);
程序输出。
2023-10-31T14:27:15.680+08:00
2023-10-31T06:27:15.680Z
3.更改java.util.Date的时区
- java.util.Date表示没有时区信息的时间点。
- 它仅表示自纪元以来的总时间(以毫秒为单位)。
- 理解这一点非常重要,默认情况下,如果我们打印 Date 对象,它将始终打印日期和时间信息以及系统的当前时区。其实这样的输出存在一定的误导性,因为它似乎暗示 Date 对象可以包含时区信息,其实不是的。
处理不同时区的Date实例的正确方法是使用SimpleDateFormat类打印其他时区的日期信息。通过调整Date对象的毫秒区域偏移来调整时间线中的即时时间不是一个好的解决方案。
SimpleDateFormat FORMATTER = new SimpleDateFormat("MM/dd/yyyy 'at' hh:mma z");
//默认时区
Date currentDate = new Date();
//当前时区日期
System.out.println(FORMATTER.format(currentDate));
// UTC 时区
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
FORMATTER.setTimeZone(utcTimeZone);
String sDateInUTC = FORMATTER.format(currentDate);
System.out.println(sDateInUTC);
程序输出:
10/31/2023 at 02:29下午 CST
10/31/2023 at 06:29上午 UTC
以上就是Java如何修改日期时间对象的时区的全部内容及其演示示例。