这是拓扑,我有 JAXB 从 XSD 文件生成 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]]
最佳答案
我在我的另一个问题上发布了这个问题的答案:java - How to check if a Calendar instance was originally a wrong date .
原理是使用 JodaTime API 和自定义 Adapter 以及 DateTime 对象的自定义包装类型。
关于java - 在转换为 Java 对象之前检查 xsd datetime 是否有定义的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697490/