2015-08-20 3 views
0

Я пытаюсь преобразовать String в gregoriancalendar date, он неспособен преобразовать. потому что строка имеет другой формат. например «2015-05-22T16: 28: 40.317-04: 00». Я видел некоторые из других примеров, но они не в этом формате времени.Как преобразовать строку в xml gregorian date date java

Я использую что-то вроде ниже:

GregorianCalendar cal = new GregorianCalendar(); 
     cal.setTime(new SimpleDateFormat("yyyy-MM-ddTHH:mm:ss-SS:zz").parse(sampleDate)); 
     XMLGregorianCalendar calendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal); 

Я даже пытался, как это тоже:

gregory.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(sampleDate)); 

ответ

3

Если вы проверяете SimpleDateFormat документ, вы увидите, что нет в шаблоне формата нет T. Для того, чтобы избежать символов без шаблонов, обернуть их вокруг одинарные кавычки ', как показано в этом примере (взято из документации):

"hh 'o''clock' a, zzzz" -> 12 o'clock PM, Pacific Daylight Time 

Я думаю, что правильный формат должен быть таким:

String format = "yyyy-MM-dd'T'HH:mm:ss.SSSX"; 
//       ^-^-----check these 
// don't pay attention to the smiley generated above, they're arrows ;) 
GregorianCalendar cal = new GregorianCalendar(); 
    cal.setTime(new SimpleDateFormat(format).parse(sampleDate)); 
    XMLGregorianCalendar calendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal); 
+2

Или использовать Java 8, 'ZonedDateTime' и стандарт ISO форматирования –

+0

@Luiggi: получаю ошибку как неразборчивым Дата java.text.ParseException: йа не поддается синтаксическому анализу te: "2012-07-19T00: 00: 00-04: 00" \t at java.text.DateFormat.parse (Неизвестный источник) \t at java_text_DateFormat $ parse.call (Неизвестный источник) – Dave

+0

@ Давид исправлен. Пожалуйста, проверьте его. –

0

Это работает, как хорошо

XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar("2015-05-22T16:28:40.317-04:00"); 
GregorianCalendar gregorianCalendar = xmlGregorianCalendar.toGregorianCalendar();