Java 8 时区转换 [英] Java 8 timezone conversions

查看:27
本文介绍了Java 8 时区转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 Java 8 中,我想将日期时间从 UTC 转换为 ACST (UTC+9:30).

In Java 8, I want to convert a datetime from UTC to ACST (UTC+9:30).

输入 -> 2014-09-14T17:00:00+00:00

input -> 2014-09-14T17:00:00+00:00

输出-> 2014-09-15 02:30:00

output-> 2014-09-15 02:30:00

String isoDateTime = "2014-09-14T17:00:00+00:00";
LocalDateTime fromIsoDate = LocalDateTime.parse(isoDateTime, DateTimeFormatter.ISO_OFFSET_DATE_TIME);

ZoneOffset offset = ZoneOffset.of("+09:30");
OffsetDateTime acst = OffsetDateTime.of(fromIsoDate, offset);
System.out.println(acst.toString()); // 2014-09-14T17:00+09:30
System.out.println(acst.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); // 2014-09-14T17:00:00+09:30

为什么不执行偏移?

推荐答案

尝试:

String isoDateTime = "2014-09-14T17:00:00+00:00";
ZonedDateTime fromIsoDate = ZonedDateTime.parse(isoDateTime);
ZoneOffset offset = ZoneOffset.of("+09:30");
ZonedDateTime acst = fromIsoDate.withZoneSameInstant(offset);

System.out.println("Input:  " + fromIsoDate);
System.out.println("Output: " + acst.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)); 

输出:

Input:  2014-09-14T17:00Z
Output: 2014-09-15T02:30:00+09:30

使用OffsetDateTime

虽然通常最好使用 ZonedDateTime 如上所示,但您可以使用 OffsetDateTime 执行相同的转换,如下所示:

Using OffsetDateTime

While it is generally better to use ZonedDateTime as shown above, you can perform the same conversion using OffsetDateTime as follows:

String isoDateTime = "2014-09-14T17:00:00+00:00";
OffsetDateTime fromIsoDate = OffsetDateTime.parse(isoDateTime);
ZoneOffset offset = ZoneOffset.of("+09:30");
OffsetDateTime acst = fromIsoDate.withOffsetSameInstant(offset);

这篇关于Java 8 时区转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆