Неверное значение 0 для поля Месяц. при конвертировании util.date в XMLgregoriandate? - PullRequest
1 голос
/ 01 апреля 2011

Я конвертирую java.util.Date в XMLGregorianDate.

Когда я печатаю дату моего использования на консоли, она отображает:

Дата: 2011-01-25 20: 33: 46,54

Но после преобразования, когда я пытаюсь его использовать, выдает мне следующее исключение: org.springframework.ws.soap.client.SoapFaultClientException: неверное значение 0 для поля месяца.

Code for Date conversion is:
 DatatypeFactory df = null;

                    try {
                        df = DatatypeFactory.newInstance();
                    } catch (DatatypeConfigurationException e) {
                        e.printStackTrace();
                    }

            GregorianCalendar gc = new GregorianCalendar();
            gc.setTimeInMillis(account.getCreationDate().getTime());

method returns: df.newXMLGregorianCalendar(gc);

Также интересно то, что при отображении методов util Date.getYear () и getMonth () (устаревший метод, используемый только для отображения даты на консоли), вывод на консоль был:

Год: 111 Месяц: 0

Почему это происходит? Кто-нибудь может сказать причину этого? Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

XMLGregorianCalendar, даже если я не вижу его в примере, использует номер месяца на основе 1. В отличие от класса java.util.Calendar, который использует номер месяца с 0-ю основаниями.

1 голос
/ 01 апреля 2011

Что ж, распечатка date.getYear() и date.getMonth() должна действительно вывести 111 и 0, так как getYear() возвращает количество лет с 1900 года, а getMonth() возвращает 0-месячный месяц. Конечно, это безумный API, но так оно и задокументировано.

Ваш код конверсии не совсем понятен - вы никогда не используете df, так какой в ​​этом смысл? Кроме того, я не вижу упоминания о XMLGregorianDate в вашем коде ... не могли бы вы дать короткую, но полную программу, которая демонстрирует проблему? Что-то, что мы можем построить и запустить?

В качестве дополнительной проблемы, в общем, я бы от души рекомендовал бы использовать Joda Time вместо java.util. {Дата, Календарь}, где это возможно. Это может не помочь в данной конкретной ситуации, но позволяет избежать многих неудачных дизайнерских решений встроенных классов и позволяет вам точно выразить то, что вы имеете в виду (местные даты, местное время и т. Д.).

...