Java XMLGregorianCalendar的格式化实例

Java XMLGregorianCalendar的格式化实例,java,jaxb,datetime-format,xmlgregoriancalendar,Java,Jaxb,Datetime Format,Xmlgregoriancalendar,我有一个日期格式为 yyyy-MM-dd'T'HH:mm:ss 我需要一个带有 yyyy-MM-dd':'HH:mm:ss 日期格式。可能吗 我需要使用JAXB在XML中设置此日期,其中模式要求字段为XMLGregorianCalendar将XMLGregorianCalendar的对象转换为ZonedDateTime的对象,您可以使用DateTimeFormatter将其格式化为所需格式 演示: import java.time.ZonedDateTime; import java.

我有一个日期格式为

yyyy-MM-dd'T'HH:mm:ss  
我需要一个带有

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
输出:

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,使用您选择的模式将日期时间对象格式化为字符串

  • 现代日期时间类型的日期时间格式类型(例如,
    java.time.format.DateTimeFormatter
    java.time.format.DateTimeFormatterBuilder
    等)在包
    java.time.format
  • 传统日期时间类型的日期时间格式类型(例如,
    java.text.simpleDataFormat
    java.text.DateFormat
    等)位于包
    java.text

  • 不,这是不可能的。
    XMLGregorianCalendar
    中的要点是以XML所需的格式提供日期和时间,而您所询问的格式在XML中是不允许的。所以你所要求的是故意阻止的

    如果您的需求是
    XMLGregorianCalendar
    ,那么您必须接受从
    toString
    toXMLFormat
    方法打印的格式(这两种方法返回相同的字符串)。我也不明白为什么你不应该对此感到高兴。此格式符合XML规范

    ps,而代码> toStReg()/代码>和<代码> ToxMulfFATATE()/代码>以XML格式返回字符串,我认为说“<代码> xMLGRGORICORANDANAR ”已经得到这种格式是错误的。它的内部表现是完全不同的(我们不应该在意)。我认为更正确的说法是<代码> XMLGregorianCalndar <代码>不能有格式。


    链接:更彻底地解释为什么没有格式为的日期时间对象。我以
    Date
    为例,但我所写的内容对
    XMLGregorianCalendar
    也是完全有效的,最后我确实提到了
    XMLGregorianCalendar

    我可以将日期格式化为字符串。问题是由于jaxb绑定和xml模式约束,我不得不使用XMLGregorianCalendar。似乎以所需格式打印日期的唯一方法是更改xml架构,这样它就接受字符串。@Lidia-这是否回答了您的问题?