当前位置:  开发笔记 > 编程语言 > 正文

Java 8将给定的时间和时区转换为UTC时间

如何解决《Java8将给定的时间和时区转换为UTC时间》经验,为你挑选了2个好方法。

我有一个字符串类型就像一个计时:"2015-01-05 17:00"ZoneId"Australia/Sydney".

如何使用Java 8 datetime API将此时间信息转换为对应的UTC时间?

还需要考虑DST的东西.



1> Mateusz Srok..:

您正在寻找ZonedDateTimeJava8 中的类 - 一个完整的日期时间,具有时区和已解析的UTC/Greenwich偏移量.在设计方面,这个类应该主要被视为a LocalDateTime和a 的组合ZoneId.这ZoneOffset是一个重要的,但次要的信息,用于确保班级代表瞬间,特别是在夏令时重叠.

例如:

ZoneId australia = ZoneId.of("Australia/Sydney");
String str = "2015-01-05 17:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime localtDateAndTime = LocalDateTime.parse(str, formatter);
ZonedDateTime dateAndTimeInSydney = ZonedDateTime.of(localtDateAndTime, australia );

System.out.println("Current date and time in a particular timezone : " + dateAndTimeInSydney);

ZonedDateTime utcDate = dateAndTimeInSydney.withZoneSameInstant(ZoneOffset.UTC);

System.out.println("Current date and time in UTC : " + utcDate);


对不起,我在示例中添加了转换为UTC.
很酷,似乎我们必须将LocalDateTime转换为ZonedDateTime然后我们可以在不同的时区之间进行转换.谢谢.

2> assylias..:

现有答案的替代方法是使用适当的时区设置格式化程序:

String input = "2015-01-05 17:00";
ZoneId zone = ZoneId.of("Australia/Sydney");

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").withZone(zone);
ZonedDateTime utc = ZonedDateTime.parse(input, fmt).withZoneSameInstant(UTC);

由于您希望与数据库进行交互,因此您可能需要一个java.sql.Timestamp,在这种情况下,您不需要显式转换为UTC时间,但可以使用Instant:

ZonedDateTime zdt = ZonedDateTime.parse(input, fmt);
Timestamp sqlTs = Timestamp.from(zdt.toInstant());

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有