使用XMLGregorianCalender获取错误日期
问题描述:
我想获取当前的日期/时间以填充到XML中。我正在使用的代码使用XMLGregorianCalender获取错误日期
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.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
类,如果可能的话--和java.util.Calendar
类与java.time
或其backport相比非常不好。
答
当您致电newXMLGregorianCalendar()
时,您需要提供您想要创建的日期的年,月,日等。
代码传递的是内部常量,它们指定各个字段,这些字段将与今天的日期或其他任何内容完全无关。
您需要修改该行以提供您想要创建的日期/时间的实际值。例如:
GregorianCalendar now - new GregorianCalendar();
xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(now);
+0
谢谢你们的解决方案!这有帮助! –
['Calendar.YEAR'](https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#YEAR)是一个代表年份字段的contanst,而不是一年的价值(它的价值是1,这就是为什么你得到0001年)。您应该使用年份值(例如'2017'或任何您想要的值)。其他领域也一样。 – 2017-08-28 16:28:33