gpt4 book ai didi

Java DateTimeFormatter 解析带有偏移量的 YearMonth

转载 作者:行者123 更新时间:2023-11-30 06:47:52 28 4
gpt4 key购买 nike

我在解析代表年份和月份的特殊字符串时遇到问题,偏移量如下:2014-08+03:00 .

所需的输出是 YearMonth .

我已经测试过创建自定义 DateTimeFormatter有各种模式,但它失败了,一个DateTimeParseException被抛出。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMZ");
TemporalAccessor temporalAccessor = YearMonth.parse(month, formatter);
YearMonth yearMonth = YearMonth.from(temporalAccessor);

这种特定格式的正确模式是什么?

是否有可能创建一个 DateTimeFormatter解析这个 String ,或者我应该操纵字符串 "2014-08+03:00"并手动删除到 "2014-08" 的偏移量, 然后将其解析为 YearMonth (或其他一些 java.time 类)?

编辑:

我进一步调查了 API 及其 .xsd 架构文件,其中属性列为 <xs:attribute name="month" type="xs:gYearMonth"/>其中命名空间是 xmlns:xs="http://www.w3.org/2001/XMLSchema">

显然属性的类型是 DataTypeConstans.GYEARMONTH其中“2014-08+03:00”是有效格式。

This答案解释了如何转换 StringXMLGregorianCalendar , 从那里可以转换为 YearMonth通过 OffsetDateTime .

XMLGregorianCalendar result = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-08+03:00");
YearMonth yearMonth = YearMonth.from(result.toGregorianCalendar().toZonedDateTime().toOffsetDateTime());

但是我仍然很好奇是否可以解析字符串 "2014-08+03:00"直接到 YearMonth仅使用自定义 java.time.DateTimeFormatter .

最佳答案

偏移量 +03:00 的正确模式是 XXX(查看 javadoc 了解详情 - 实际上在 DateTimeFormatterBuilder 文档中有一个 more detailed explanation ):

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMXXX");
String str = "2014-08+03:00";
YearMonth yearMonth = YearMonth.parse(str, formatter);
System.out.println(yearMonth);

输出将是:

2014-08

关于Java DateTimeFormatter 解析带有偏移量的 YearMonth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45297076/

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