我有一个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()