Java DateTimeFormatter 解析带有偏移量的 YearMonth
Java DateTimeFormatter parse YearMonth with offset
我在解析代表年份和月份的特殊字符串时遇到问题,偏移量如下: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
class)?
编辑:
我进一步调查了 API 及其 .xsd 模式文件,其中属性列为 <xs:attribute name="month" type="xs:gYearMonth"/>
,其中命名空间为 xmlns:xs="http://www.w3.org/2001/XMLSchema">
显然属性的类型是 DataTypeConstans.GYEARMONTH,其中“2014-08+03:00”是有效格式。
This 回答解释了如何将 String
转换为 XMLGregorianCalendar
,从那里可以通过 OffsetDateTime
转换为 YearMonth
.
XMLGregorianCalendar result = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-08+03:00");
YearMonth yearMonth = YearMonth.from(result.toGregorianCalendar().toZonedDateTime().toOffsetDateTime());
但是我仍然很好奇是否可以仅使用自定义 java.time.DateTimeFormatter
.
将字符串 "2014-08+03:00"
直接解析为 YearMonth
偏移 +03:00
的正确模式是 XXX
(检查 javadoc for details - actually in DateTimeFormatterBuilder
docs there's a 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
我在解析代表年份和月份的特殊字符串时遇到问题,偏移量如下: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
class)?
编辑:
我进一步调查了 API 及其 .xsd 模式文件,其中属性列为 <xs:attribute name="month" type="xs:gYearMonth"/>
,其中命名空间为 xmlns:xs="http://www.w3.org/2001/XMLSchema">
显然属性的类型是 DataTypeConstans.GYEARMONTH,其中“2014-08+03:00”是有效格式。
This 回答解释了如何将 String
转换为 XMLGregorianCalendar
,从那里可以通过 OffsetDateTime
转换为 YearMonth
.
XMLGregorianCalendar result = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-08+03:00");
YearMonth yearMonth = YearMonth.from(result.toGregorianCalendar().toZonedDateTime().toOffsetDateTime());
但是我仍然很好奇是否可以仅使用自定义 java.time.DateTimeFormatter
.
"2014-08+03:00"
直接解析为 YearMonth
偏移 +03:00
的正确模式是 XXX
(检查 javadoc for details - actually in DateTimeFormatterBuilder
docs there's a 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