2013-08-23 4 views
0

У меня есть поле Entity, объявленное как Date, и отображается в поле даты в оракуле. Когда я печатаю значение для этого поля, я получаю формат даты, например 2013-04-23 09:05:03.0.Oracle to Hibernate to ISO 8601 Формат даты

Мне нужно преобразовать эту дату в формат ISO 8601. Так что я использовал:

System.out.println("Converted Date:" + asXMLGregorianCalendar(retrunedDate); 

private static DatatypeFactory df = DatatypeFactory.newInstance(); 

public static XMLGregorianCalendar asXMLGregorianCalendar(java.util.Date date) { 
    if (date == null) { 
     return null; 
    } else { 
     DatatypeFactory df = DatatypeFactory.newInstance(); 
     GregorianCalendar gc = new GregorianCalendar(); 
     gc.setTimeInMillis(date.getTime()); 
     return df.newXMLGregorianCalendar(gc); 
    } 
} 

Следующий код возвращает:

System.out.println("Converted Date:" + asXMLGregorianCalendar(retrunedDate); 

// Output 
Converted Date: 2013-04-23T09:05:03.000-05:00 

Вопросы:

  1. Существует 000 вместо фактического числа. Не знаете почему?
  2. Что такое 0 в конце от спящего режима 2013-04-23 09:05:03.0? Как получить полную дату?

Когда я прохожу Date, я получаю результат мне нужно .:

System.out.println("Converted Date:" + asXMLGregorianCalendar(new Date()); 

// Output 
Converted Date: 2013-08-23T17:19:15.664-05:00 

Это то, что мне нужно. Вместо 000 мне нужно получить миллисекунды. Неужели Hibernate что-то делает с датой?

+0

0 - миллисекунда. Что вы подразумеваете под «полной датой»? Распечатанная дата выглядит довольно полной. Опять же, формат ISO 8601 слишком расплывчатый. ISO 8601 описывает большое количество форматов даты и времени. Можете ли вы сказать мне, какой формат даты вы пытаетесь достичь? Тогда я могу помочь вам в том, как его достичь. – SerotoninChase

+0

Спасибо, я обновил свой вопрос. Пожалуйста, проверьте –

+0

Проблема будет заключаться в том, что все, что помещает данные * в *, ваша база данных обрезается до ближайшей секунды. Код для его распечатки в порядке. – Affe

ответ

2

Тип данных Oracle DATE не хранит дробные секунды. Если вы хотите сохранить и восстановить миллисекунды, вам необходимо изменить тип данных столбца на TIMESTAMP.

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