【问题标题】:Convert JAXBElement<XMLGregorianCalendar> to OffsetDateTime将 JAXBElement<XMLGregorianCalendar> 转换为 OffsetDateTime
【发布时间】:2019-12-18 06:08:20
【问题描述】:

我正在尝试将 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。

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

【问题讨论】:

  • 您是否将文本格式与日期时间对象混为一谈?只有文本字符串有“格式”。日期时间对象可以将字符串解析为输入,并生成字符串作为输出,但此类字符串始终与日期时间对象不同且分开。

标签: java datetime xmlgregoriancalendar


【解决方案1】:

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 ) ;

【讨论】:

    猜你喜欢
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2019-08-20
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多