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

尼克拉斯

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

  • iso表示
    • 2019-06-12T07:17:47Z-Instant.parse()可以使用
  • RFC1123
    • Wed, 12 Jun 2019 03:17:47 -0400-DateTimeFormatter.RFC_1123_DATE_TIME.parse()可以使用

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

  • Tue, 25 May 2021 00:00:00 EDT
  • 03 Jun 2021 18:35:00 HKT

我已经尝试过一些自定义模式和 ZonedDateTime + OffsetDateTimeparse()方法。虽然我还没有找到一种方法来获取我可以转换为Instant. 我也不能控制源,也不能修复输出格式。

我怎样才能更宽容并解析这些日期时间?

马特

您可以DateTimeFormatter使用自定义模式创建一个在开始时具有可选的星期几的自定义模式然后,使用parse格式化程序方法,您可以直接指定所需的解析日期时间类型(根据Ole VV 的评论)。另一种方法是首先解析为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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

解析时区日期字符串java

从ISO 8601祖鲁字符串转换日期为java.time.Instant在Java中8

将字符串日期解析为long java

将日期字符串解析为某些Java对象

Java日期字符串解析创建时区差异

Java从字符串中解析带时区的日期

Kotlin/java - 如何將日期時間字符串轉換為 Instant?

Java将8601格式的字符串解析为更易读的日期解析错误

Java Instant to Date - 具有不同的时区

将字符串时间戳解析为Instant throws不支持的字段:InstantSeconds

Java:将多种字符串日期时间格式解析为LocalDateTime / Date / Calender

将字符串转换/解析为Datetime Java时丢失日期

将日期字符串解析为 Java 中的特定格式

Java:使用日期对象的时区缩写解析日期字符串

在Java中将日期“ 2020-05-22T12:51:20.765111Z”解析为Instant

将日期字符串解析为java.util.Date时,模式字符'T'不合法

如何将字符串解析为Java Date?

将字符串解析为 java.util.Date

无法将字符串解析为LocalDate(Java 8)

将JSON对象解析为Java中的字符串

将字符串解析为java.sql.date

Java的Instant.parse上日期的Java 8

使用SpringData-MongoDB将Java 8 Instant存储为BSON日期

格式字符串java.time.format.DateTimeFormatter.ISO_INSTANT?

如何使用objectMapper设置字符串格式java.time.Instant?

如何在Spring Webflux中将java.time.Instant序列化为ISO字符串

Java 将字符串解析为日期“2017-06-12T14:45:00+05:30”

Java按日期将字符串<SqlRow>排序为字符串

用Java解析日期字符串