在Java中将 XMLGregorianCalendar 转换为日期
XMLGregorianCalendar 可以根据需要转换为Java.util.Date 或Java.sql.Date 。 Java的API / XML绑定体系结构)是一个用于创建XML文档的Java对象与Java对象的XML文件的共同框架。 JAXB 还允许 XML Schema 文件构造Java类(.XSD 文件)。 JAXB 默认将 xs:date、xs:time 和 xs:dateTime 映射到Java的 XMLGregorianCalendar,但您可以自定义 XJC 以构造Java.util.Date 对象而不是 javax.xml.datatype.xmlGregorianCalendar。
由于Java.util.Date 是处理Java日期和时间的最常用方法,因此我们总是需要将 XMLGregorianCalendar 实例转换为Java Date 实例。
使用Java API,我们可以轻松地将 XMLGregorianCalendar 转换为Java的XMLGregorianCalendar 日期和日期。
顺便说一下,很高兴注意到有三种不同形式的 XML Schema 可以表示日期、时间或两者,而Java.util.Date 包含有关日期和时间的详细信息。
这是一个Java程序,它将 XMLGregorianCalendar 转换为 Date。所以我们将采用 XMLGregorianCalendar 并返回Java.util.Date。
代码:
Java
// Convert XMLGregorianCalendar to Date in Java
import java.io.*;
import java.util.*;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
class GFG {
public static void main(String[] args)
{
Date today = new Date();
// Converting date to XMLGregorianCalendar
XMLGregorianCalendar xml
= toXMLGregorianCalendar(today);
System.out.println(
"XMLGregorianCalendar from Date in Java : "
+ xml);
// Converting XMLGregorianCalendar to java.util.Date
// in Java
Date date = toDate(xml);
System.out.println(
"java.util.Date from XMLGregorianCalendar in Java : "
+ date);
}
public static XMLGregorianCalendar
toXMLGregorianCalendar(Date date)
{
GregorianCalendar gCalendar
= new GregorianCalendar();
gCalendar.setTime(date);
XMLGregorianCalendar xmlCalendar = null;
try {
xmlCalendar
= DatatypeFactory.newInstance()
.newXMLGregorianCalendar(gCalendar);
}
catch (DatatypeConfigurationException ex) {
System.out.println(ex);
}
return xmlCalendar;
}
public static Date toDate(XMLGregorianCalendar calendar)
{
if (calendar == null) {
return null;
}
return calendar.toGregorianCalendar().getTime();
}
}
XMLGregorianCalendar from Date in Java : 2021-02-22T17:10:28.732Z
java.util.Date from XMLGregorianCalendar in Java : Mon Feb 22 17:10:28 UTC 2021
所以现在关于 XMLGregorianCalendar 和日期的要点:
- XML Schema 有各种日期、时间和日期时间数据类型,例如 xsd:date、xsd:time 和 xsd:dateTime,所有这些都默认映射到Java的 XMLGregorianCalendar 和 JAXB XJC。
- 在构造 GregorianCalendar case 时,最好使用构造函数而不是调用 GregorianCalendar.getInstance() 因为它类似于 Calendar.getInstance() 并且可以根据本地设置返回不同的日历类型,例如 Thai Local Buddha Calendar 或 Japanese Imperial日本皇历。您还可以在使用构造函数时排除类型转换,因为 getInstance() 返回Java.util.Calendar 实例并防止Java的ClassCastException 。
- 对于 xs:date、xs:time 和 xs:dateTime 数据类型,您可以将 XJC 配置为生成 Date 而不是 XMLGregorianCalendar。我稍后会写到这一点,但仍然可以探索这个选项。
这就是关于如何将 XMLGregorianCalendar 转换为Java Date 和 XMLGregorianCalendar Date。