XMLGregorianCalendar 的格式实例

问题描述

我有一个 XMLGregorianCalendar 的实例,日期格式为

yyyy-MM-dd'T'HH:mm:ss  

我需要一个 XMLGregorianCalendar 的实例与

yyyy-MM-dd':'HH:mm:ss 

日期格式。可能吗?

我需要使用 JAXB 在 XML 中设置此日期,其中架构要求该字段为 XMLGregorianCalendar

解决方法

XMLGregorianCalendar 的对象转换为 ZonedDateTime 的对象,您可以使用 DateTimeFormatter 将其格式化为所需的格式。

演示:

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

public class Main {
    public static void main(String[] args) throws DatatypeConfigurationException {
        String givenDateTimeString = "2020-11-08T13:05:46";
        XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance()
                .newXMLGregorianCalendar(givenDateTimeString);
        System.out.println(xmlGregorianCalendar);

        ZonedDateTime zdt = xmlGregorianCalendar.toGregorianCalendar().toZonedDateTime();

        String formatted = DateTimeFormatter.ofPattern("uuuu-MM-dd':'HH:mm:ss",Locale.ENGLISH).format(zdt);

        System.out.println(formatted);
    }
}

输出:

2020-11-08T13:05:46
2020-11-08:13:05:46

现在,您可以在 XML 中使用字符串 formatted

注意:日期时间对象应该存储有关日期、时间、时区等的信息,与格式无关。您可以使用日期时间格式化 API 将日期时间对象格式化为 String,并使用您选择的模式。

  • 现代日期时间类型的日期时间格式类型(例如 java.time.format.DateTimeFormatterjava.time.format.DateTimeFormatterBuilder 等)位于包 java.time.format 中。
  • 旧日期时间类型的日期时间格式类型(例如 java.text.SimpleDateFormatjava.text.DateFormat 等)位于包 java.text 中。