2013-08-23 151 views
0

我有一個實體字段被聲明爲Date並被映射到oracle中的日期字段。 當我打印該字段的值時,我得到日期格式,如2013-04-23 09:05:03.0Oracle到Hibernate到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

相關問題