gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:24 25 4
gpt4 key购买 nike

我正在开发一个与 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 然后只复制您想要:

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

如果您要使用 newXMLGregorianCalendar(lexicalRepresentation)

,这将避免 String 的往返往返

关于java - 如何仅将 XMLGregorianCalendar 与日期部分(日、月、年)进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14978328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com