2013-04-19 2 views
1

У меня странная ситуация с Java Calendar. Я использую dozer mapper для сопоставления объектов.Календарный вопрос с часовым поясом 000Z

Мой requirenment, что я получил элемент схемы XML, который принимает только тип календаря,

сказать элемент <expDtTime>2010-11-11T09:30:47.000Z</expDtTime>

Я должен преобразовать это. Я написал следующий конвертер:

public Calender m(Date source,Calender c) { 
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 
calendar.setTime(source); 
return calendar; 
} 

Мне нужен он в том же формате. Но он отображается как

<expDtTime>2010-11-11T04:00:47.000Z</expDtTime> 

Я хочу, чтобы мой объект имел одинаковый формат и значение. Он показывает 4:00 на время.

Есть ли способ избавиться от этой проблемы?

Любые предложения или помощь будут высоко оценены.

Заранее спасибо

+4

Что вы имеете в виду под "он показывает, как"? Очень точно, что вы делаете. Обратите внимание, что «000Z» не является часовым поясом здесь - 000 просто говорит «no milliseconds» и «Z» для UTC в качестве часового пояса. (Или, по крайней мере, «нет смещения от UTC в этот момент». –

+0

да не меняет часовой пояс. Является ли ваш часовой пояс GMT? –

ответ

0

Для манипуляций с XML DATETIME использования XMLGregorianCalendar из пакета javax.xml.datatype.

синтаксический анализ из строки

XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar("2010-11-11T04:00:47.000Z"); 
GregorianCalendar gc = xgc.toGregorianCalendar(); 

новообращенного из GregorianCalendar

XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc); 

формата dateType строки XML

String xmlDate = xgc.toString(); 
+0

Я использую dozer mapper для сопоставления объектов. Я использую Junit для проверки этого Мой фактический и ожидаемый должен быть таким же. 2010-11-11T09: 30: 47.000Z - объект Date. NewXMLGregorianCalendar() принимает строку. Пробовал преобразовать его, бросая illigelArgumentException – user2299225