首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带偏移量的Java DateTimeFormatter解析YearMonth

带偏移量的Java DateTimeFormatter解析YearMonth
EN

Stack Overflow用户
提问于 2017-07-25 07:49:47
回答 1查看 559关注 0票数 2

我在解析一个表示一年零一个月的特殊字符串时遇到了问题,其偏移量是这样的:2014-08+03:00

所需的输出是一个YearMonth

我已经测试过用各种模式创建一个自定义DateTimeFormatter,但是它失败了,并且抛出了一个DateTimeParseException

代码语言:javascript
复制
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMZ");
TemporalAccessor temporalAccessor = YearMonth.parse(month, formatter);
YearMonth yearMonth = YearMonth.from(temporalAccessor);

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

是否可以创建一个解析此DateTimeFormatterString,或者是否应该操纵字符串"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“是有效格式。

答案解释了如何将String转换为XMLGregorianCalendar,从那里可以通过OffsetDateTime转换为YearMonth

代码语言:javascript
复制
XMLGregorianCalendar result = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-08+03:00");
YearMonth yearMonth = YearMonth.from(result.toGregorianCalendar().toZonedDateTime().toOffsetDateTime());

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 11:55:17

偏移量+03:00的正确模式是XXX (查看javadoc获取详细信息-实际上在DateTimeFormatterBuilder文档中有一个更详细的解释):

代码语言:javascript
复制
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMXXX");
String str = "2014-08+03:00";
YearMonth yearMonth = YearMonth.parse(str, formatter);
System.out.println(yearMonth);

产出如下:

2014-08

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45297076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档