我的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