java - 使用 XMLGregorianCalendar 获取错误的日期

标签 java xml calendar xmlgregoriancalendar

我正在尝试将当前日期/时间填充到 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分钟。我在中部标准时间上午 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.util.Datejava.util.Calendarjava.time 或其向后移植相比,类确实很糟糕。

关于java - 使用 XMLGregorianCalendar 获取错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45923451/

相关文章:

java - gwt 将新的子节点添加到 xml 文件中

java - 无法在日历类 java 中设置时间

android - CalendarContract.EventsColumns.CUSTOM_APP_URI 的用途是什么?

java - 鼠标单击时未绘制线条

java - 使用 tuckey-urlrewrite-filter rermote-addr 阻止 IP

java.net.ConnectException : errno: 110 (Connection timed out)

java - Genexus Uploadify 不适用于大文件

android - 抽屉导航选项位于布局下方

xml - XSLT 将结果分成 3 组

javascript - 将资源 View /甘特图添加到 jQuery Fullcalendar