java.util.Date到XMLGregorianCalendar
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java.util.Date到XMLGregorianCalendar,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2758字,纯文字阅读大概需要4分钟。
内容图文
![java.util.Date到XMLGregorianCalendar](/upload/InfoBanner/zyjiaocheng/714/f237f2f2ad4243289b13c788ba0c17df.jpg)
是不是有一种方便的方法从java.util.Date到XMLGregorianCalendar?
解决方法:
我想退后一步,对这个10年前的问题进行现代审视.提到的类,Date和XMLGregorianCalendar,现在已经过时了.我挑战它们的使用并提供替代品.
>日期总是设计不佳,已超过20年.这很简单:不要使用它.
> XMLGregorianCalendar也很老,并且有一个老式的设计.据我了解,它用于为XML文档生成XML格式的日期和时间.如2009-05-07T19:05:45.678 02:00或2009-05-07T17:05:45.678Z.这些格式与ISO 8601非常吻合,java.time的类(现代Java日期和时间API)可以生成它们,我们更喜欢它们.
无需转换
对于许多(大多数?)目的而言,Date的现代替代品将是Instant. Instant是一个时间点(就像Date一样).
Instant yourInstant = // ...
System.out.println(yourInstant);
此代码段的示例输出:
2009-05-07T17:05:45.678Z
它与我上面的示例XMLGregorianCalendar字符串的后一个相同.正如大多数人所知,它来自System.out.println隐式调用的Instant.toString.使用java.time,在很多情况下我们不需要在Date,Calendar,XMLGregorianCalendar和其他类之间进行过去的转换(在某些情况下我们确实需要转换,但是,我向你展示了一些下一节).
控制偏移量
Date和Instant中都没有时区或UTC偏移量. Ben Noland先前接受且仍然最高的投票答案使用JVM当前默认时区来选择XMLGregorianCalendar的偏移量.要在现代对象中包含偏移量,我们使用OffsetDateTime.例如:
ZoneId zone = ZoneId.of("America/Asuncion");
OffsetDateTime dateTime = yourInstant.atZone(zone).toOffsetDateTime();
System.out.println(dateTime);
2009-05-07T13:05:45.678-04:00
这再次符合XML格式.如果要再次使用当前JVM时区设置,请将zone设置为ZoneId.systemDefault().
如果我绝对需要XMLGregorianCalendar怎么办?
有更多方法可以将Instant转换为XMLGregorianCalendar.我将介绍一对,每个都有其优点和缺点.首先,就像XMLGregorianCalendar生成类似2009-05-07T17:05:45.678Z的字符串一样,它也可以从这样的字符串构建:
String dateTimeString = yourInstant.toString();
XMLGregorianCalendar date2
= DatatypeFactory.newInstance().newXMLGregorianCalendar(dateTimeString);
System.out.println(date2);
2009-05-07T17:05:45.678Z
亲:它很短,我认为它没有给出任何惊喜.骗局:对我来说,感觉就像浪费将即时格式化为字符串并将其解析回来.
ZonedDateTime dateTime = yourInstant.atZone(zone);
GregorianCalendar c = GregorianCalendar.from(dateTime);
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
System.out.println(date2);
2009-05-07T13:05:45.678-04:00
亲:这是官方转换.控制偏移自然而然. Con:它经历了更多步骤,因此更长.
如果我们有一个约会怎么办?
如果您从遗留API中获得了一个老式的Date对象,您现在无法更改,请将其转换为Instant:
Instant i = yourDate.toInstant();
System.out.println(i);
输出与以前相同:
2009-05-07T17:05:45.678Z
如果要控制偏移量,请按照与上面相同的方式进一步转换为OffsetDateTime.
如果您有一个老式的Date并且绝对需要一个老式的XMLGregorianCalendar,那么就使用Ben Noland的答案.
链接
> Oracle tutorial: Date Time解释如何使用java.time.
> XSD Date and Time Data Types在W3Schools.
> Wikipedia article: ISO 8601
内容总结
以上是互联网集市为您收集整理的java.util.Date到XMLGregorianCalendar全部内容,希望文章能够帮你解决java.util.Date到XMLGregorianCalendar所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。