在转换为 Java 对象之前检查 xsd 日期时间是否有定义的时区

Check if xsd datetime had a defined timezone before conversion to Java object

这是拓扑图,我从 XSD 文件中生成了 JAXB java 类。对于 xsd:datetime 类型,转换通过 public static Calendar javax.xml.bind.DatatypeConverter.parseDateTime(String lexicalXSDDateTime) 方法。

我无权访问日期的字符串值(xml 文件中的那个),我只能访问生成的 Calendar 对象,以及我想要的知道,是否在日期的原始字符串值中定义了时区。

例如,这个字符串 2015-07-29T11:17:02.428+02:00 有一个定义的时区,而这个 2015-07-29T11:17:02.428 有一个未定义的时区,我只想知道哪个生成的 Calendar 对象最初有定义的时区。

我尝试了 Calendar.getTimeZone() 方法,但 xsd 到 java 的转换似乎没有使时区无效。

例如下面的代码

System.out.println(DatatypeConverter.parseDateTime("2015-07-29T11:17:02.428+02:00").getTimeZone());
System.out.println(DatatypeConverter.parseDateTime("2015-07-29T11:17:02.428").getTimeZone());

输出这个

sun.util.calendar.ZoneInfo[id="GMT+02:00",offset=7200000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]

sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]

我在另一个问题上发布了这个问题的答案:

原理是使用 JodaTime API 和一个自定义的 Adapter 和一个自定义的 DateTime 对象的包装器类型。