在转换为 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 对象的包装器类型。
这是拓扑图,我从 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 对象的包装器类型。