我正在开发一个与spring-struts web应用程序集成的webservice,在XSD中有一个XMLGregorianCalendar类型属性,假设属性名称为trxDate。在SOAPUI测试应用程序中,如果我将trxDate的值插入:然后我发送了soap xml请求数据,并在服务方法中打印了值:System.out.println( trxDate)方法,打印输出结果与输入的结果相同:2013-02-21。如何比较XMLGregorianCalendar只有日期部分(日,月,年)?
现在,我试图创建一个函数来比较trxDate与当前日期。我知道我们可以使用trxDate.compare(currentDate)方法进行比较。问题是我不知道如何创建XMLGregorianCalendar对象设置与当前日期只有日期部分(日,月和年)用于比较。
我试着用这个代码:
GregorianCalendar gc = new GregorianCalendar();
gc.set(GregorianCalendar.HOUR_OF_DAY, 0);
gc.set(GregorianCalendar.MINUTE, 0);
gc.set(GregorianCalendar.SECOND, 0);
gc.set(GregorianCalendar.MILLISECOND, 0);
XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
System.out.println(xgc);
结果为:
2013-02-20T00:00:00.000 + 07:00
但我很期待:
2013- 02-20
如果使用日期(XGC)与trxDate比较:
int result = trxDate.compare(xgc);
结果为2,表示INDETERMINATE(来自DatatypeConstants类)。正确的结果应该是-1,0或1.
那么,我的代码有什么问题?
哇,我很困惑,有很多方法,在你的方式和Blaise的方式之间更好? – null 2013-02-21 03:47:42
我刚刚试过你的代码,有一点错误,你需要为'xgc.setMonth()'添加+1,所以代码应该变成:'xgc.setMonth(now.get(Calendar.MONTH)+ 1);'。看来XMLGregorianCalendar使用基于一个月的索引。 – null 2013-02-21 04:03:02
@suud谢谢,我编辑了解决这个问题的答案。 – 2013-02-21 08:09:51