nul*_*ull 4 java xsd web-services jaxb gregorian-calendar
我正在开发一个与 spring-struts Web 应用程序集成的 Web 服务,在 XSD 中有一个 XMLGregorianCalendar 类型属性,假设属性名称是trxDate。
在 SOAPUI 测试应用程序中,如果我插入了 trxDate 的值:2013-02-21,那么我发送了soap xml请求数据,并使用以下方法在服务方法中打印了该值: System.out.println(trxDate) 方法,打印输出结果与输入相同:2013-02-21。
现在,我正在尝试创建一个函数来将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);
Run Code Online (Sandbox Code Playgroud)
结果是:
2013-02-20T00:00:00.000+07:00
但我期待:
2013-02-20
如果使用日期(xgc )与trxDate进行比较:
int result = trxDate.compare(xgc);
Run Code Online (Sandbox Code Playgroud)
结果是 2,这意味着:INDETERMINATE(来自 DatatypeConstants 类)。正确的结果应该是 -1、0 或 1。
那么我的代码有什么问题吗?
与其尝试从 中清除不需要的字段GregorianCalendar,不如创建一个未初始化的字段,然后仅复制您想要的字段可能会更XMLGregorianCalendar容易:
XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar();
GregorianCalendar now = new GregorianCalendar();
xgc.setYear(now.get(Calendar.YEAR));
xgc.setMonth(now.get(Calendar.MONTH) + 1);
xgc.setDay(now.get(Calendar.DAY_OF_MONTH));
System.out.println(xgc);
Run Code Online (Sandbox Code Playgroud)
这可以避免往返 String 并再次返回,如果您要使用的话,这是必要的newXMLGregorianCalendar(lexicalRepresentation)
| 归档时间: |
|
| 查看次数: |
20073 次 |
| 最近记录: |