使用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运行的。

+1

['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

看看你传递到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.Calendar类与java.time或其backport相比非常不好。

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

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

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

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

谢谢你们的解决方案!这有帮助! –