获取java.sql.date的最大和最小日期

Kva*_*sir 1 java sql date

我到处都看到了我必须使用的最小和最大日期:

Date dateModificationMin = new Date( Long.MIN_VALUE );
Date dateModificationMax = new Date( Long.MAX_VALUE );
Run Code Online (Sandbox Code Playgroud)

但我在我的java.sql.date上做了它返回:055-12-02为最短日期994-08-17为最大日期

如何获取java.sql.date的最大值和最小值?

Bas*_*que 6

特定数据库

答案是特定于数据库的,不能在Java或JDBCjava.sql类型中找到.数据库之间可能的日期 - 时间值的限制差别很大.

例如:

  • Postgres 9.5的TIMESTAMP WITH TIME ZONE公布范围为公元前4713年至公元294276年.
  • MySQL 5.7TIMESTAMP类型的范围为'1970-01-01 00:00:01.000000'到'2038-01-19 03:14:07.999999'UTC.DATETIME值的范围是'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999',
  • SQLite没有这样的数据类型,并将日期时间值存储为ISO 8601字符串("YYYY-MM-DD HH:MM:SS.SSS").因此大概只限于年份,9999如果它只跟踪一年的4位数(我不知道).
  • Firebird似乎TIMESTAMP从1753年1月1日到9999年12月31日,准确度为百分之三秒或3.33毫秒.我找不到他们的主要参考页面,也没有更新刚刚宣布的版本3.
  • Microsoft SQL Serverdatetime2类型的范围为0001-01-01到9999-12-31到CE 1月1,1日到9999年12月31日,时间从00:00:00到23:59:59.9999999(注意7位数字)分数,小于微秒但比纳秒更粗糙.也有datetime带范围内 1753年1月1日至9999年12月31日,并通过23时间的日00:00:00:59:59.997.

我建议您在将来和过去选择任意点,而不是确定绝对限制,并将其用作限制.远远超出了在软件和应用程序的生命周期中遇到的价值,但远远超出了大多数数据库的限制.将限制硬编码为应用程序中的常量,例如Java中的枚举.

Stack Overflow上的其他帖子表明,对于查找日期时间值以用作未知或尚未确定的值的占位符(我认为这是问题背后的目的)的问题,没有简单的简单答案.