使用 XMLGregorianCalendar 得到错误的日期
Getting Wrong Date Using XMLGregorianCalender
我正在尝试将当前 date/time 填充到 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 上午 CST。
当您调用 newXMLGregorianCalendar()
时,您需要提供您要创建的日期的年、月、日等。
您的代码传递了指定各个字段的内部常量,这些字段将是与今天的日期或其他任何内容完全无关的小整数。
您需要修改该行以提供要创建的 date/time 的实际值。例如:
GregorianCalendar now - new GregorianCalendar();
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(now);
查看您传递给 newXMLGregorianCalendar
的参数:
[...].newXMLGregorianCalendar(Calendar.YEAR, Calendar.MONTH+1,
Calendar.DAY_OF_MONTH, Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND,
DatatypeConstants.FIELD_UNDEFINED, TimeZone.LONG).
Calendar.YEAR
、Calendar.MONTH
等值是常量,用于指代日历的特定部分。您通常会像这样使用它们:
Calendar calendar = ...;
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
// etc
如果您想为当前 date/time 创建一个 XMLGregorianCalendar
,看起来您需要明确地这样做:
Calendar calendar = new GregorianCalendar();
xmlDate = DatatypeFactory.newInstance().newXMLGregoriantCalendar(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
// etc
);
更好的是,如果可能,请使用 java.time
类 - java.util.Date
和 java.util.Calendar
类 与 java.time
或其向后移植。
我正在尝试将当前 date/time 填充到 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 上午 CST。
当您调用 newXMLGregorianCalendar()
时,您需要提供您要创建的日期的年、月、日等。
您的代码传递了指定各个字段的内部常量,这些字段将是与今天的日期或其他任何内容完全无关的小整数。
您需要修改该行以提供要创建的 date/time 的实际值。例如:
GregorianCalendar now - new GregorianCalendar();
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(now);
查看您传递给 newXMLGregorianCalendar
的参数:
[...].newXMLGregorianCalendar(Calendar.YEAR, Calendar.MONTH+1,
Calendar.DAY_OF_MONTH, Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND,
DatatypeConstants.FIELD_UNDEFINED, TimeZone.LONG).
Calendar.YEAR
、Calendar.MONTH
等值是常量,用于指代日历的特定部分。您通常会像这样使用它们:
Calendar calendar = ...;
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
// etc
如果您想为当前 date/time 创建一个 XMLGregorianCalendar
,看起来您需要明确地这样做:
Calendar calendar = new GregorianCalendar();
xmlDate = DatatypeFactory.newInstance().newXMLGregoriantCalendar(
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH) + 1,
// etc
);
更好的是,如果可能,请使用 java.time
类 - java.util.Date
和 java.util.Calendar
类 与 java.time
或其向后移植。