这个问题在这里已有答案:
这是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 = 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,朝九特派= -1,startDayOfWeek = 1,开始时间= 3600000,startTimeMode = 2,endMode = 2,endMonth = 9,endday指定= -1,一个endDayOfWeek = 1,结束时间= 3600000,endTimeMode = 2] ]
1 回答
我在另一个问题上发布了这个问题的答案:java - How to check if a Calendar instance was originally a wrong date .
原理是使用JodaTime API和自定义适配器以及DateTime对象的自定义包装器类型 .