【问题标题】:Oracle to Hibernate to ISO 8601 Date formatOracle 休眠到 ISO 8601 日期格式
【发布时间】:2013-08-27 02:00:06
【问题描述】:

我有一个实体字段声明为日期,并映射到 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. 休眠2013-04-23 09:05:03.0末尾的0是什么?如何获取完整日期?

当我通过Date 时,我得到了我需要的结果。:

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

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

这就是我需要的。而不是000,我需要毫秒。 Hibernate 是否正在处理日期?

【问题讨论】:

  • 0 是毫秒。你所说的“全日约会”是什么意思?打印出来的日期对我来说看起来很满。再一次,ISO 8601 格式太模糊了。 ISO 8601 描述了大量的日期/时间格式。你能告诉我你想要达到的日期格式是什么吗?然后,我可以帮助你如何实现它。
  • 谢谢,我更新了我的问题。请检查
  • 问题似乎是任何将数据放入您的数据库都会截断到最接近的秒数。打印出来的代码很好。
  • 000 是毫秒。我认为这里没有问题。 1000 毫秒就是一秒。所以毫秒可以有 000 到 999 之间的任何值。确保你的数据库也存储毫秒。否则,您将始终看到 000。
  • 您可以通过如下查询查看存储在 oracle 中的完整值:select to_char(timestampColumn, 'YYYY-MM-DD"T"HH24:MI:SS.ff3') from table;

标签: java oracle hibernate date datetime


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    相关资源
    最近更新 更多