在转换为Java对象之前,检查xsd datetime是否具有已定义的时区

时间:2015-07-29 10:12:14

标签: java xml datetime xsd jaxb

这是topo,我有来自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”,偏移= 7200000,dstSavings = 0,useDaylight =假,过渡= 0,lastRule =空]

     

sun.util.calendar.ZoneInfo [ID = “欧洲/巴黎”,偏移量= 360万,dstSavings = 3600000,useDaylight =真,过渡= 184,lastRule = java.util.SimpleTimeZone中[ID =欧洲/巴黎,偏移= 3600000,dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 2,startMonth = 2,朝九特派= -1,startDayOfWeek = 1,开始时间= 3600000,startTimeMode = 2,endMode = 2,endMonth = 9,endday指定= -1,一个endDayOfWeek = 1,结束时间= 3600000,endTimeMode = 2]]

1 个答案:

答案 0 :(得分:0)

我在另一个问题上发布了这个问题的答案:java - How to check if a Calendar instance was originally a wrong date

原则是使用JodaTime API和自定义适配器以及DateTime对象的自定义包装类型。