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-这是否回答了您的问题?