📌  相关文章
📜  在Java中将 XMLGregorianCalendar 转换为日期

📅  最后修改于: 2022-05-13 01:54:20.119000             🧑  作者: Mango

在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。