0

我正在尝试获取当前日期/时间以填充 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 运行了这个。

4

2 回答 2

3

查看您传递给的参数newXMLGregorianCalendar

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

, etc 值是常量Calendar.YEAR,用于引用日历的特定部分。您通常会像这样使用它们:Calendar.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如果可能的话,请改用类 -与any 或它的 backport相比, java.util.Dateandjava.util.Calendar类真的很讨厌。java.time

于 2017-08-28T16:29:40.150 回答
2

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

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

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

GregorianCalendar now - new GregorianCalendar();
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(now);
于 2017-08-28T16:29:31.240 回答