将时区字符串日期解析为 Java 的即时

Parsing Timezone String Date into Java's Instant

我正在从一些 发送典型的 RSS 站点阅读:

相反,我得到了这些字符串:

我已经尝试过一些自定义模式和 ZonedDateTime + OffsetDateTime parse() 方法。虽然我还没有找到一种方法来获取可以转换为 Instant 的日期时间表示形式。我也无法控制来源,无法固定输出格式。

如何更宽容地解析这些日期时间?

您可以使用自定义模式创建一个 DateTimeFormatter,该模式的开头有一个可选的 星期几。然后,使用格式化程序的 parse 方法,您可以直接指定所需的解析日期时间类型(根据 Ole V.V. 的注释) .另一种方法是首先解析为 ZonedDateTime 然后转换为 Instant.

DateTimeFormatter formatter =
        DateTimeFormatter.ofPattern("[EEE, ]dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);

String input1 = "Tue, 25 May 2021 00:00:00 EDT";
Instant instant1 = formatter.parse(input1, Instant::from);
// Instant instant1 = ZonedDateTime.parse(input1, formatter).toInstant();
System.out.println(instant1);

String input2 = "03 Jun 2021 18:35:00 HKT";
Instant instant2 = formatter.parse(input2, Instant::from);
// Instant instant2 = ZonedDateTime.parse(input2, formatter).toInstant();
System.out.println(instant2);

输出:

2021-05-25T04:00:00Z
2021-06-03T10:35:00Z