如何将 XMLGregorianCalendar 与仅日期部分(日、月、年)进行比较?

2024-03-08

我正在开发一个与 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);

结果是:
2013-02-20T00:00:00.000+07:00

但我期待:
2013-02-20

如果使用日期 (xgc)来比较trxDate:

int result = trxDate.compare(xgc);

结果是 2,这意味着:INDETERMINATE(来自 DatatypeConstants 类)。正确的结果应该是 -1、0 或 1。

那么我的代码有什么问题吗?


而不是尝试从GregorianCalendar,创建未初始化的可能会更容易XMLGregorianCalendar然后只复制您的字段do want:

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);

这可以避免往返 String 并再次返回,如果您要使用的话,这是必要的newXMLGregorianCalendar(lexicalRepresentation)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 XMLGregorianCalendar 与仅日期部分(日、月、年)进行比较? 的相关文章

随机推荐