xml – 没有时区的xsd:dateTime的语义及其转换为Date
我有一个关于
XML Schema的内置类型xsd:dateTime的问题.
没有时区的xsd:dateTime的确切语义是什么?防爆. 1970-01-01T00:00:00. 我已阅读了许多XML Schema规范文档,但无法知道如何处理它. 具体来说,我想了解如何正确地将xsd:dateTime转换为Date(如java.util.Date或JavaScript Date)对象. 旁注:我完全了解Java util类,如DatatypeConverter或DatatypeFactory,我想找到定义如何进行此转换的XML Schema规范. Date类(在Java中以及在JavaScript中)的问题是这些类确实有时区(默认为本地时区).如果我在输入时得到没有时区的xsd:dateTime,那么我必须以某种方式决定,我应该假设哪个时区.否则我只是无法将其转换为timezoned值(如Date). 现在问题是,我应该假设什么.我在这里看到以下选项: >假设像UTC这样的默认值. 我真的不喜欢第二种选择.这完全是随机的!在我的机器上,如果我跑 System.out.println(DATATYPE_FACTORY .newXMLGregorianCalendar("1970-01-01T00:00:00") .toGregorianCalendar().getTime().getTime()); 我会得到-3600000,360000 GMT 1,GMT或GMT-1(甚至更多变种取决于夏令时.这是如此随意,我真的没有得到这个.这是否意味着比我们有一个带有元素的XML文档 <date-time>1970-01-01T00:00:00</date-time> 我们实际上不知道,这究竟是什么时间段的意思? 第一个选项(假设UTC)对我来说似乎更有效,但这显然不是(至少)Java工具正在做的事情. 所以可以请某人给我一个指针,指出某种定义无时区xsd:dateTime语义的规范? 谢谢. 更新: 目前的发现是: >未指定的时区具有“未指定”时区的语义,也就是说,您不能盲目地假设处理器的UTC或本地时区或其他任何区域.这是一些当地时区,但哪一个 – 你真的不知道. 我的解决方案如下: >在我的库中,我有一个所谓的上下文对象,它提供了XML处理上下文(类似于JAXB JAXBContext).我将使用getDefaultTimezoneOffset()和setDefaultTimezoneOffset(int timezoneOffset)等方法扩展此对象 解决方法
基本上,时区缺少信息,解释缺席信息的方法有很多种;最后,这取决于你.可能的解释是:
>时区不详 XPath / XQuery / XSLT规范系列假定了一个上下文定义的时区.这里的上下文可以是用户的区域设置,或运行软件的机器的时区,或任何其他数量的东西. 从某种意义上说,它与省略时间和仅给出日期没有什么不同.当你说你出生于1973年3月21日时,你究竟是什么意思?你在说什么时区?假设您可能遗漏了这些信息,因为没有人可能会关心这些信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |