Я разрабатываю веб-сервис, интегрированный с веб-приложением Spring-struts, в XSD существует свойство типа XMLGregorianCalendar, скажем, имя свойства trxDate.Как сравнить XMLGregorianCalendar с только частью даты (день, месяц, год)?
В применении тестирования SoapUI, если я вставил значение trxDate с: 2013-02-21, то я послал данные запроса мыла XML, и я напечатал значение в методе обслуживания с: System.out.println (trxDate), результат распечатки такой же, как и введенный: 2013-02-21.
Теперь, я пытаюсь создать функцию для сравнения trxDate с текущей датой. Я знаю, что мы можем сравнить его с помощью метода trxDate.compare (currentDate). Проблема в том, что я не могу создать объект XMLGregorianCalendar с текущей датой только с помощью части Date (день, месяц и год), которая будет использоваться для сравнения.
Я пытался с этим кодом:
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.
Итак, что случилось с моим кодом?
Эй, я так смущен, что есть много способов, которые лучше между вашим путем и способом Блейза? – null
Я просто пробовал свой код, есть ошибка, вам нужно добавить +1 в 'xgc.setMonth()', поэтому код должен стать: 'xgc.setMonth (now.get (Calendar.MONTH) + 1); '. Кажется, XMLGregorianCalendar использует одномесячный индекс. – null
@suud thanks, я отредактировал ответ, чтобы исправить это. –