Java DateTimeFormatter使用偏移量解析YearMonth

时间:2017-07-25 07:49:48

标签: java parsing datetime timezone-offset date-parsing

我在解析表示年份和月份的特殊字符串时遇到问题,其中包含这样的偏移量:YearMonth

所需的输出为DateTimeFormatter

我已经测试过创建一个包含各种模式的自定义DateTimeParseException,但它失败并抛出DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMZ"); TemporalAccessor temporalAccessor = YearMonth.parse(month, formatter); YearMonth yearMonth = YearMonth.from(temporalAccessor);

DateTimeFormatter

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

甚至可以创建一个解析此String的{​​{1}},还是应该操纵字符串"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回答解释了如何将String转换为XMLGregorianCalendar,从那里可以通过YearMonth转换为OffsetDateTime。< / p>

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

1 个答案:

答案 0 :(得分:3)

偏移+03:00的正确模式为XXX(请查看javadoc了解详细信息 - 实际上是DateTimeFormatterBuilder个文档&sa; 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