2015-05-05 3 views
0

У меня есть фрагмент кода, который преобразует Date в XMLGregorianCalendar, но после просмотра даты результатов разные. Не знаю, почему изменения в датах после конверсий.Дата преобразования XMLGregorianCalendar с неправильными результатами

Код:

public void getDate() throws ParseException { 

     Date current = null; 
     String str = "1980-10-26"; 
     DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     Date current1 = format.parse(str);  
     XMLGregorianCalendar xmlCalendar = null; 
     xmlCalendar = Utility.convertDateToXMLGreCal(current1);  
     System.out.println("xmlCalendar: "+xmlCalendar); 
     current = Utility.convertXMLGreClndrToDate(xmlCalendar); 
     System.out.println("current1: "+current.toString()); 
    } 



public static XMLGregorianCalendar convertDateToXMLGreCal(final Date date){ 

     TimeZone zone = TimeZone.getTimeZone("UTC"); 
     GregorianCalendar gregoClndr = new GregorianCalendar(zone); 
     gregoClndr.setTime(date); 
     XMLGregorianCalendar xmlGreClndr = null; 
     try { 
      final DatatypeFactory dataTypeFactory = DatatypeFactory.newInstance(); 
      xmlGreClndr = dataTypeFactory.newXMLGregorianCalendar(gregoClndr); 

     } catch (DatatypeConfigurationException e) { 

     } 
     return xmlGreClndr; 
    } 

*

Результаты:

 
xmlCalendar: 1980-10-25T18:30:00.000Z 
current1: Sun Oct 26 00:00:00 IST 1980 

Я ожидаю xmlCalendar как 1980-10-26T00:00:00.000Z.

Может кто-нибудь дать мне знать, как это сделать?

+0

Я не знаком с этим, но мне кажется, что дата на 100% правильная, просто другой часовой пояс? – Jaques

ответ

1

Проблема в том, что вы не указываете часовой пояс в своем DateFormat - поэтому используется часовой пояс системы по умолчанию. Результат - полночь в вашем локальном часовом поясе (IST), но в XMLGregorianCalendar, он отображается в формате UTC.

Самый простой способ исправить это указать UTC как часовой пояс в вашем DateFormat:

format.setTimeZone(TimeZone.getTimeZone("UTC")); 

Таким образом, каждая дата будет анализироваться в полночь в начале этого «UTC день», который звучит как это то, чего вы ожидали.

+0

Я установил часовой пояс как UTC в методе convertDateToXmlGreCal, вот почему результат идет в формате UTC. – Reddy

+0

@ reddy1234: Но вы * разбираете * дату, как если бы она была в локальное время, когда вы вызываете 'format.parse (str)'. (Это не помогает, что вы вызываете два метода, которые вы не показывали, что означает, что мы не можем надеяться воспроизвести проблему ...) –

+0

Добавлен код двух методов в вопросе, можете ли вы помоги мне сейчас. – Reddy

Смежные вопросы