使用 XMLGregorian日历获取错误的日期



我正在尝试获取当前日期/时间以填充XML。我正在使用代码

XMLGregorianCalendar xmlDate = null;
try {
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(Calendar.YEAR, Calendar.MONTH+1, Calendar.DAY_OF_MONTH, Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND, DatatypeConstants.FIELD_UNDEFINED, TimeZone.LONG).normalize();
lastUpdatetDateTime.setTextContent(xmlDate.toXMLFormat());
} catch (DatatypeConfigurationException e) {
}

但是我得到的输出是 0001-03-05T10:11:13Z,据我所知,我们在 2017 年! :)

甚至时间也慢了8分钟。我在CST上午11:21运行了这个。

看看你传递给newXMLGregorianCalendar的参数:

[...].newXMLGregorianCalendar(Calendar.YEAR, Calendar.MONTH+1, 
Calendar.DAY_OF_MONTH, Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND,
DatatypeConstants.FIELD_UNDEFINED, TimeZone.LONG).

Calendar.YEARCalendar.MONTH等值是常量,用于指代日历的特定部分。您通常会像这样使用它们:

Calendar calendar = ...;
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
// etc

如果要为当前日期/时间创建XMLGregorianCalendar,则看起来需要明确执行此操作:

Calendar calendar = new GregorianCalendar();
xmlDate = DatatypeFactory.newInstance().newXMLGregoriantCalendar(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
// etc
);

如果可能的话,最好改用java.time类 - 与java.time或其反向移植相比,java.util.Datejava.util.Calendar类真的很讨厌。

当您调用newXMLGregorianCalendar()时,您需要提供要创建的日期的年、月、日等。

您的代码传递了指定各种字段的内部常量,这些字段将是与今天的日期或其他任何内容完全无关的小整数。

您需要修改该行以提供要创建的日期/时间的实际值。 例如:

GregorianCalendar now - new GregorianCalendar();
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(now);

最新更新