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

问题描述 投票:0回答:3

我有一段时间使用字符串类型,例如:

"2015-01-05 17:00"
,而
ZoneId
"Australia/Sydney"

如何使用Java 8将此时间信息转换为对应的UTC时间(考虑DST)?

java java-8 utc java-time
3个回答
110
投票

您正在寻找 Java8 中的

ZonedDateTime
类 - 带有时区的完整日期时间以及与 UTC/格林威治的解析偏移量。在设计方面,此类应主要被视为
LocalDateTime
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);

24
投票

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

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());

0
投票
   **// Refactored Logic**     

        ZoneId australia = ZoneId.of("Australia/Sydney");
        ZoneId utcZoneID= ZoneId.of("Etc/UTC");
        String ausTime = "2015-01-05 17:00";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

        //converting in datetime of java8
        LocalDateTime ausDateAndTime = LocalDateTime.parse(ausTime, formatter);

        // DateTime With Zone
        ZonedDateTime utcDateAndTime = ausDateAndTime.atZone(utcZoneID);
        // output - 2015-01-05T17:00Z[Etc/UTC]

        // With Formating DateTime
        String utcDateTime = utcDateAndTime.format(formatter);
        // output - 2015-01-05 17:00
© www.soinside.com 2019 - 2024. All rights reserved.