【问题标题】:Java ResultSet.getString() for Date field skips millisecond日期字段的 Java ResultSet.getString() 跳过毫秒
【发布时间】:2023-01-20 01:46:40
【问题描述】:

我正在使用 ojdbc8 版本 21.3.0.0 并以字符串形式检索 Oracle 中的日期列。 我期待该字符串打印为 2021-01-21 00:00:00.0 但它打印为 2021-01-21 00:00:00 ,因此跳过了毫秒。 想知道为什么会发生这种变化? 有没有办法让 ResultSet 的 getString() 仍然以毫秒返回,即 2021-01-21 00:00:00.0 ?

ojdbc8 12.2 以这种格式返回 2021-01-21 00:00:00.0。随着版本升级,可以观察到这种变化。

【问题讨论】:

    标签: java oracle jdbc resultset ojdbc


    【解决方案1】:

    在 Oracle 中,DATE 是一种存储为 7 个字节的二进制数据类型,分别表示:世纪、世纪年、月、日、小时、分钟和秒。这些值都是整数,所以会有绝不是任何小数秒。

    如果你想要小数秒,那么你需要使用 TIMESTAMP 数据类型。

    如果你想用小数秒显示时间,那么你需要格式化日期并显式打印零小数秒(你可以通过将 ".0" 连接到你的字符串来实现)。

    【讨论】:

    • 使用 ojdbc8 12.2 ResultSet getString() 返回 2021-01-21 00:00:00.0。随着版本升级,我看到了这个变化。
    • @user2359634 这听起来像是驱动程序将日期隐式格式化为字符串的方式发生了变化。您可以继续依赖隐式日期格式并在驱动程序更改时调整您的代码(在这种情况下,将 ".0" 附加到结果;但如果驱动程序的行为再次更改,您将需要再次修复它)或者您可以交换以明确格式化日期,这样您将始终知道格式是什么。
    【解决方案2】:

    最新的驱动程序具有正确的行为。 DATE 类型在 Oracle 中不包括毫秒。请参考文档here

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 2014-10-12
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 2021-06-30
      • 1970-01-01
      相关资源
      最近更新 更多