我正在将java.util.Date转换为XMLGregorianDate。
当我在控制台上打印我的工具日期时,它会显示:
日期:2011-01-25 20:33:46.54
但转换后,当我尝试使用它时,给我以下异常: org.springframework.ws.soap.client.SoapFaultClientException:Month字段的值0无效。
Code for Date conversion is:
DatatypeFactory df = null;
try {
df = DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException e) {
e.printStackTrace();
}
GregorianCalendar gc = new GregorianCalendar();
gc.setTimeInMillis(account.getCreationDate().getTime());
method returns: df.newXMLGregorianCalendar(gc);
同样有趣的是,当我显示util Date.getYear()和getMonth()方法时(不再使用的方法只是在控制台上显示日期),控制台上的输出是:
年份:111月:0
为什么会这样?任何人都能说出这背后的理由吗 提前谢谢。
答案 0 :(得分:3)
XMLGregorianCalendar
,即使我在示例中没有看到它,也使用基于1的月份编号。与java.util.Calendar
类不同,后者使用0个月的月号。
答案 1 :(得分:1)
好吧,打印date.getYear()
和date.getMonth()
确实应该打印111和0,因为getYear()
返回自1900年以来的年数,getMonth()
返回0月。一个疯狂的API肯定,但这是它的记录方式。
你的转换代码并不是很清楚 - 你永远不会使用 df
,那么它有什么意义呢?同样,我在代码中看不到XMLGregorianDate
的任何提及......你能否提供一个简短但完整的程序来证明这个问题?我们可以建立并运行的东西吗?
作为一个侧面问题,一般情况下,我会衷心地建议尽可能使用Joda Time而不是java.util。{Date,Calendar}。它可能无助于这种特殊情况,但它避免了内置类的许多糟糕的设计决策,并允许您准确表达您的意思(本地日期,当地时间等)。