【问题标题】:Insert the max date (independent from database)插入最大日期(独立于数据库)
【发布时间】:2017-05-09 04:27:37
【问题描述】:

在我的本地设置中,我使用的是一个简单的 H2 数据库。 “托管”解决方案将有另一个(相似但不相同)数据库。

我需要将最大可能日期插入 DateTime 列。我尝试使用

Instant.MAX

但是,这会导致列中出现 -169104626-12-11 20:08:15.99999999。

是否有关于如何插入最大可能日期的可靠选项?

【问题讨论】:

  • Instant.MIN 的结果是什么?
  • 这样一个瞬间的象征意义是什么?无限的未来?
  • 你为什么不插入31.12.9999 23:59:59,你可以将它作为常量存储在你的java应用程序中?
  • 实际上是的 - 无限未来,但不为空 - 因为以后使用 > now 应该可以轻松过滤
  • 它们在不同的 sql 服务器上有所不同。例如 MSSQL 和 DB2 使用 9999 作为最大年份,但 postgresql 有 294276。postgresql.org/docs/9.2/static/datatype-datetime.html

标签: java date


【解决方案1】:

最大日期(独立于数据库)

没有这样的事情。尝试设置最大日期绝对取决于数据库。

SQL 标准几乎没有涉及日期时间处理的主题(很遗憾)。日期时间的数据类型和行为在各种数据库中有很大的差异。不同数据库之间的最小值和最大值可能完全不同。即使在单个数据库中,各种日期时间数据类型的最小/最大范围也可能有很大不同。例如,一些数据库具有旧的专有日期时间类型以及行为完全不同的较新的更常见或标准类型。

Java 本身有非常不同的日期时间类型集:

  • 麻烦的遗留类型(java.util & java.sql)
  • 精心设计的现代java.time 类型。

这些的最小值/最大值不同。

是否有关于如何插入最大可能日期的可靠选项?

没有。

如果您尝试将最大值用作某种标志(例如“未确定的未来日期”)以避免 NULL,请改为选择某个任意日期,该日期足够远以超过任何合法值,但不会超过超出您可能要使用的任何数据库的限制。在您的 Java 代码和数据库中为该值定义一个常量,并详细记录。

我建议坚持使用四位数的年份,以避免各种混乱和问题,例如通过超出字段的显示宽度来破坏报告和 GUI。像9999 这样的东西。或者可能是2666,因为infamy of 666 对人类读者来说非常明显。

在 Stack Overflow 中搜索 Java、min 和 max 等词,以进行更多讨论。比如thisthisthisthisthis。这个问题基本上是其他问题的重复。

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 2011-04-06
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多