Oracle将Hibernate改为ISO8601日期格式

时间:2013-08-23 22:07:38

标签: java oracle hibernate date datetime

我有一个声明为Date的实体字段,并映射到oracle中的日期字段。 当我打印该字段的值时,我得到的日期格式为2013-04-23 09:05:03.0

我需要将此日期转换为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. hibernate 0结尾的2013-04-23 09:05:03.0是什么?我如何获得完整日期?
  3. 当我通过Date时,我得到了我需要的结果。:

    System.out.println("Converted Date:" + asXMLGregorianCalendar(new Date());
    
    // Output
    Converted Date: 2013-08-23T17:19:15.664-05:00
    

    这就是我需要的。而不是000,我需要毫秒。 Hibernate是否对日期做了些什么?

1 个答案:

答案 0 :(得分:2)

Oracle DATE数据类型不存储小数秒。如果要存储和恢复毫秒,则需要将列的数据类型更改为TIMESTAMP