gpt4 book ai didi

java - 从具有一位数小时偏移量的字符串中解析日期时间

转载 作者:行者123 更新时间:2023-11-30 06:04:09 24 4
gpt4 key购买 nike

我需要用 Java 解析日期。我有字符串值 2018-05-15 09:32:51.550082 +3:00 我需要将其解析为日期时间。我尝试解析为 ZonedDateTime,但在索引 10 处出现错误。尝试使用 DateTimeFormatter 解析器 'yyyy-MM-dd HH:mm:ss.SSSSSS Z 进行解析' 并在索引 26 处出错。显然我的 +3:00 的 UTC 偏移量无法解析。我该怎么做?

最佳答案

Java 9 及更高版本允许:

    String dateTimeString = "2018-05-15 09:32:51.550082 +3:00";
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("uuuu-MM-dd HH:mm:ss.SSSSSS ")
.appendOffset("+H:MM:ss", "+0:00")
.toFormatter();
OffsetDateTime dateTime = OffsetDateTime.parse(dateTimeString, formatter);
System.out.println(dateTime);

输出:

2018-05-15T09:32:51.550082+03:00

对于 Java 8 或 ThreeTen Backport,您可能必须在解析之前准备日期时间字符串:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSSSSS XXX");
dateTimeString
= dateTimeString.replaceFirst("([+-])(\\d(?::\\d\\d){0,2})$", "$10$2");

其余的和以前一样,给出了相同的结果。 replaceFirst 调用在 +3:00 之间插入一个 0,但前提是时间只有一个数字。正则表达式难以阅读,因此您会更喜欢 Java 9 解决方案。

正如评论中已经讨论的那样,困难的部分是 +3:00 的偏移量。 Java 的内置格式化程序和可用于指定您自己的格式的格式模式字母都需要偏移量中的两位数小时。我使用的 DateTimeFormatterBuilder.appendOffset 方法允许指定有限数量的格式; Java 8 中的 9 种不同格式; Java 9 中的 22。链接:Documentation of appendOffset() .

关于java - 从具有一位数小时偏移量的字符串中解析日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50344734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com