关于XML:检查XSD DATETIME是否有定义的时区,然后转换为Java对象

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

本问题已经有最佳答案,请猛点这里访问。

这里是Topo,我从XSD文件中生成了JAXB类。对于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对象最初有一个定义的时区。

我尝试了EDCOX1×6的方法,但是XSD到Java的转换似乎没有取消时区。

例如,以下代码

1
2
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]]


我把这个问题的答案放在我的另一个问题上:Java——如何检查日历实例是否是错误的日期。

其原理是使用jodatime API、自定义适配器和datetime对象的自定义包装类型。