我有一个XMLGregorianCalendar
日期格式为的实例
yyyy-MM-dd'T'HH:mm:ss
我需要一个XMLGregorianCalendar
with的实例
yyyy-MM-dd':'HH:mm:ss
日期格式。可能吗?
我需要使用 JAXB 在 XML 中设置此日期,其中架构要求该字段为XMLGregorianCalendar
.
我有一个XMLGregorianCalendar
日期格式为的实例
yyyy-MM-dd'T'HH:mm:ss
我需要一个XMLGregorianCalendar
with的实例
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
现在,您可以formatted
在 XML 中使用该字符串。
注意:日期时间对象应该存储有关日期、时间、时区等的信息,而不是有关格式的信息。您可以String
使用日期时间格式化 API 将日期时间对象格式化为您选择的模式。
java.time.format.DateTimeFormatter
,java.time.format.DateTimeFormatterBuilder
等等)在包中,java.time.format
.java.text.SimpleDateFormat
,java.text.DateFormat
等等)在包中,java.text
.不,这是不可能的。重点XMLGregorianCalendar
是以 XML 要求的格式提供日期和时间,而您所询问的格式在 XML 中是不允许的。因此,您要求的内容被故意阻止。
如果您的要求是XMLGregorianCalendar
,那么您将不得不接受从其toString
和toXMLFormat
方法打印的格式(两者返回相同的字符串)。我也不明白为什么你不应该对此感到高兴。这种格式符合 XML 规范。
PS 虽然toString()
并toXMLFormat()
以 XML 格式返回字符串,但我认为说XMLGregorianCalendar
有这种格式是错误的。它的内部表示是完全不同的(我们不应该关心)。我认为说an XMLGregorianCalndar
cannot have a format更正确。
链接: 我的一个答案更彻底地处理了为什么你不能有格式的日期时间对象。我用Date
的是一个例子,但我写的东西也完全有效XMLGregorianCalendar
,我在最后确实提到XMLGregorianCalendar
了。