如何在Java 7中将ZonedDateTime转换为XMLGregorianCalendar



我的java 7应用程序正在使用java 8中的服务,我收到了一个类似的字符串形式的日期

"2020-04-13T12:36:13Z" 

它实际上是一个ZonedDateTime。我需要将此字符串转换为XMLGregorianCalendar并发送到另一个服务?由于我的应用程序是在java7中,我无法将字符串解析为ZonedDateTime。有什么方法可以让我转换吗?

知道怎么做很容易。

String receivedDateTimeString = "2020-04-13T12:36:13Z";

XMLGregorianCalendar xmlgc = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(receivedDateTimeString);

System.out.println(xmlgc);

输出:

2020-04-13T12:36:13Z

ZonedDateTime.toString()有时会生成ISO 8601格式(有时是一种扩展格式,其区域ID不属于ISO 8601(。在你的例子中,你得到了纯ISO 8601。XML文档中的日期和时间使用了ISO 8601的变体,这已经足够接近了,我们可以在这里将它们视为相同的。因此,XMLGregorianCalendar实例是直接从ISO8601字符串创建的,其toString方法会生成相同的ISO8601串。

ThreeTen Backport允许您在Java 7中使用ZonedDateTime

您可以,也可能更喜欢在Java 7中使用ZonedDateTime,而不是XMLGregorianCalendar。这个使用通过ThreeTen Backport,java.time到Java6和7的Backport,请参阅底部的链接。

import org.threeten.bp.ZonedDateTime;
public class DemoZonedDateTimeInJava7 {
public static void main(String[] args) {
String receivedDateTimeString = "2020-04-13T12:36:13Z";
ZonedDateTime zdt = ZonedDateTime.parse(receivedDateTimeString);
System.out.println(zdt);
}
}

2020-04-13T12:36:13Z

  • 在Java 8及更高版本中,以及在较新的Android设备上(从API 26级开始(,现代API是内置的
  • 在非Android Java 6和7中,获得ThreeTen Backport,即现代类的Backport(JSR310的ThreeTen;请参阅底部的链接(
  • 在(旧的(安卓系统上使用安卓版的ThreeTen Backport。它被称为ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类

链接

  • Oracle教程:日期时间,解释如何使用java.Time
  • Java规范请求(JSR(310,其中首次描述了java.time
  • ThreeTen Backport项目,java.time到Java 6和7的Backport(JSR-310的ThreeTen(
  • ThreeTenABP,安卓版ThreeTen背包
  • 问题:如何在Android项目中使用ThreeTenABP,有一个非常彻底的解释
  • 维基百科文章:ISO 8601

最新更新