Axis2 - формат даты - PullRequest
       27

Axis2 - формат даты

7 голосов
/ 28 августа 2009

Сценарий

Формат даты, который Axis2 выводит как ответ клиенту веб-службы в формате «2009-08-28 + 01: 00». Я хотел бы изменить это, чтобы показывать только дату без информации о часовом поясе (например ::"2009-08-28")

Конфигурация

Библиотека

Ось 2 1.4.1

1011 * WSDL * <xsd:element name="StartDate" type="xsd:date" />; Вопрос Можно ли изменить формат вывода, который используется в Axis 2 для записи информации о дате? Можете ли вы увидеть какие-либо проблемы для клиентов .NET, пересматривающих преобразование этого формата даты? Ограничения К сожалению, невозможно изменить элемент «StartDate» на xsd:string или xsd:token


Уточнение вопроса Поскольку я использую xsd:date Тип данных XML, который определяется как [-]CCYY-MM-DD[Z|(+|-)hh:mm] Таким образом, если я установлю Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("UTC"); ... тогда вывод выглядит так 2009-01-28Z Вы можете заменить «UTC» на «GMT» или «». Можно ли избавиться от "Z"?

Ответы [ 4 ]

8 голосов
/ 30 марта 2011

У меня была такая же проблема, и возможно удалить часовой пояс из дат!

Вы можете использовать свой собственный созданный ConvertUtil.

Сначала вы должны создать класс с вашим настроенным методом / методами преобразования:

public class myConvertUtil extends org.apache.axis2.databinding.utils.ConverterUtil
    {
    public static String convertToString(Date value)
        {
        // return customized Date format
        }
    }

Тогда вы должны установить этот класс как SYSTEM_PROPERTY_ADB_CONVERTERUTIL:

String convert_class = "com.firm.myConvertUtil";
System.setProperty(ConverterUtil.SYSTEM_PROPERTY_ADB_CONVERTERUTIL, convert_class);
5 голосов
/ 12 июня 2011

Проблема вызвана использованием объекта Calendar в качестве исходного значения для поля xsd: date. Когда вы получаете экземпляр Calendar, он всегда идет с часовым поясом (часовой пояс по умолчанию используется, если не указан явно). Для удаления часового пояса используйте метод clear () и восстановите все поля, кроме часового пояса. Затем библиотека отображения XML (я тестировал с XmlBeans, но я думаю, что это также верно для других библиотек привязки, поддерживаемых Axis) генерирует XML без суффикса часового пояса.

Calendar myDate = Calendar.getInstance();   // returns GregorianCalendar
Calendar now = (Calendar)myDate.clone();    // save current timestamp
myDate.clear(); // this clears the fields, including Calendar.ZONE_OFFSET
myDate.set(     //set all fields back from the saved copy
    now.get(Calendar.YEAR),
    now.get(Calendar.MONTH),
    now.get(Calendar.DAY_OF_MONTH),
    now.get(Calendar.HOUR_OF_DAY),
    now.get(Calendar.MINUTE),
    now.get(Calendar.SECOND)
);
0 голосов
/ 30 января 2013

Существует метод очистки Calendar #, который выполнит то, что вам нужно. Чтобы избавиться от смещения часового пояса, просто сделайте следующее:

cal.clear (Calendar.ZONE_OFFSET);

Обратите внимание, что время без смещения часового пояса неоднозначно. Это оставляет потребителю времени угадать смещение UTC.

0 голосов
/ 28 августа 2009

Вы не можете.

Его пространство значений описывается как комбинация даты и времени дня в главе 5.4 ISO 8601. Его лексическое пространство - это расширенный формат:

[-] CCYY-MM-DDThh: мм: сс [Z | (+ | -) чч: мм]

Часовой пояс можно указать как Z (UTC) или (+ | -) чч: мм. Часовые пояса, которые не указаны, считаются неопределенными.

http://books.xmlschemata.org/relaxng/ch19-77049.html

Edit:

Для справки см. XML-схема. Часть 2. Типы данных, второе издание 3.2.7 dateTime

...