java - 转换 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。
任何人都可以帮助获得所需的日期时间转换。
解决方案
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 ) ;
推荐阅读
- c++ - 将 const 发送到获取非 const 参数的函数是否会被视为错误?
- firebase - 无法从隔离区初始化 Firebase 应用实例
- java - Harmonyos 中 TypedValue.applyDimension(int unit, float value, android.util.DisplayMetrics metrics) 的替代方案是什么?
- reactjs - 在 React 中将状态从子组件传递到父组件?
- c - 如何解决 mini-sql 中的内存问题?“C”
- linux-kernel - 如何添加新的 LSM 挂钩函数?
- c# - 通过 C# 处理 csv 文件中的数百万行并将数据保存到 SQL Server 中的多个表中的最快方法
- linux-kernel - 如何读取设备驱动程序中的寄存器?
- c# - 控制器未按预期呈现部分
- python - 如何设置与笔记本路径不同的jupyter工作目录