首页 > 解决方案 > 转换 JAXBElement到偏移日期时间

问题描述

我正在尝试将 JAXBElement-XMLGregorianCalendar 转换为 offsetDateTime。我能够做到这一点,但我想将日期转换为特定格式。

我用来转换的代码: calendarValue 是 2016-03-25T00:00:00+05:30 但我需要将类型转换为 offsetDateTime 所以我在进行以下转换

calendarValue.toGregorianCalendar().getTime().toInstant().atOffset(ZoneOffset.UTC)

作为回应,我得到转换后的值:2016-03-24T18:30:00Z,而我希望转换后的值是:2016-03-25T00:00:00+05:30。

任何人都可以帮助获得所需的日期时间转换。

标签: javadatetimexmlgregoriancalendar

解决方案


tl;博士

myXMLGregorianCalendar
.toGregorianCalendar()
.toZonedDateTime()
.format( 
    DateTimeFormatter.ISO_OFFSET_DATE_TIME 
)

细节

作为中间步骤,将遗留对象转换XMLGregorianCalendar为另一个遗留类。GregorianCalendar

GregorianCalendar gc = myXMLGregorianCalendar.toGregorianCalendar() ;

转换为现代类。

ZonedDateTime zdt = gc.toZonedDateTime() ;

这个ZonedDateTime对象可能会满足您的需求。

生成一个字符串,以您想要的格式表示该时刻的值,尽管不幸的是您的格式掩盖了时区的名称,这是有价值的信息。

String output = zdt.format( DateTimeFormatter.ISO_OFFSET_DATE_TIME ) ;

但是,如果您想看到同一时刻调整为 UTC,只需提取一个Instant.

Instant instant = zdt.toInstant() ;

如果您需要更灵活的OffsetDateTime类,请应用偏移量。

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;

推荐阅读