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

标签 java xml datetime xsd jaxb

这是拓扑,我有 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/

相关文章:

java - 学习构造函数和对象

c++ - 桌面应用程序数据库

java - 将 String 解析为 LocalDateTime 时出现 DateTimeParseException

javascript - Java中的AES加密无法在Javascript中解密

java - 使用Uploadify时出错

java - 使用代码进行 hibernate 重置(从0开始PK)

android - scrollView中ImageView的动态高度

c# - VS 2015 智能感知 : Exceptions Thrown not Previewed

php - 如何获取当前日期时间和 HH :MM:SS 中的时间戳值之间的时间差

javascript - 如何将 Etc/GMT+2 时区的时间戳转换为 unix 时间戳?