如何正确地转换xs:time到java日期



我有一个xml文件,它有一个表示时间戳的字段。time字段是可选的,因此没有合并的datetime字段。使用JAXB,我们将该字段映射到java模型中的XMLGregorianCalendar。

现在我的问题是如何在xml中给出的日期将此时间转换为正确的当地时间(例如欧洲/柏林夏令时)?

xml文件中的时间如下所示:

<timeField>14:20:00.0+02:00</timeField>

该偏移量要么未指定(假定为本地时间),要么指定为UTC的偏移量。

如果我尝试

xmlGregorianCalendarDate.toGregorianCalendar().getTime();

则假定的时区为sun.util.calendar.ZoneInfo[id="GMT+02:00",offset=7200000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],不考虑夏令时。

相反,如果我使用xmlGregorianCalendarDate.toGregorianCalendar(timeZone).getTime();,那么它将完全放弃xml中的偏移量,以支持指定的时区。

如果XML中没有指定时区,则无法猜测它是否是DST(例如GMT+2:00在柏林是DST,但GMT+2:00在基辅是而不是 DST,那么程序应该选择哪个时区?

所以如果你想要夏令时,你需要提供时区,要么在XML中,要么就像你上面做的那样:xmlGregorianCalendarDate.toGregorianCalendar(timeZone).getTime()

相关内容

  • 没有找到相关文章

最新更新