Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java.sql.date的最大和最小日期_Java_Sql_Date - Fatal编程技术网

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

获取java.sql.date的最大和最小日期,java,sql,date,Java,Sql,Date,我在任何地方都看到,为了获得我必须使用的日期的最小值和最大值: Date dateModificationMin = new Date( Long.MIN_VALUE ); Date dateModificationMax = new Date( Long.MAX_VALUE ); 但我是在java.sql.date返回时执行的: 055-12-02为最小日期 994-08-17为最长日期 如何获取java.sql.date的最大值和最小值?如果对java.util.date执行代码,您将获得

我在任何地方都看到,为了获得我必须使用的日期的最小值和最大值:

Date dateModificationMin = new Date( Long.MIN_VALUE );
Date dateModificationMax = new Date( Long.MAX_VALUE );
但我是在java.sql.date返回时执行的: 055-12-02为最小日期 994-08-17为最长日期


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

如果对java.util.date执行代码,您将获得

dateModificationMin = Sun Dec 02 17:47:04 CET 292269055
dateModificationMax = Sun Aug 17 08:12:55 CET 292278994
我猜,带有负长时间戳的日期是错误的,所以最小日期是

new Date(0)==  Thu Jan 01 01:00:00 CET 1970
由于java.sql.date扩展了java.util.date,因此可能存在相同的问题

看看日期在-1*10^15之后是如何变得疯狂的 还有java.sql.Date:

timestamp = -10000000000000 date = 1653-02-10
timestamp = -100000000000000 date = 1200-02-26
timestamp = -1000000000000000 date = 720-11-16
timestamp = -10000000000000000 date = 912-02-01
timestamp = -100000000000000000 date = 840-03-08
timestamp = -1000000000000000000 date = 119-02-24
timestamp = 8446744073709551616 date = 634-03-09
timestamp = -7766279631452241920 date = 582-01-06
这里错了!!:D

特定于数据库 答案是特定于数据库的,在Java或其他语言中找不到。数据库之间对可能的日期时间值的限制差别很大

例如:

  • 范围从公元前4713年到公元294276年
  • 类型的范围为“1970-01-01 00:00:01.000000”到“2038-01-19 03:14:07.99999”UTC。
    DATETIME
    值的范围为“1000-01-01 00:00:00.000000”到“9999-12-31 23:59:59.99999”
  • 因此,将日期时间值存储为字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。因此,如果它只跟踪一年中的4位数字(我不知道),那么大概只限于9999年
  • 从1753年1月1日到9999年12月31日,准确度为百分之三百秒,即3.33毫秒。我找不到他们的主要参考页面,也找不到刚刚发布的版本3的更新
  • 类型的范围为0001-01-01至9999-12-31至1999年1月1日,1 CE至1999年12月31日,时间为00:00:00至23:59:59.999999(注意分数的7位数字,比微秒细,但比纳秒粗)。还有1753年1月1日至9999年12月31日的时间,以及一天中的时间00:00:00至23:59:59.997
我建议你选择未来和过去的任意点作为你的极限,而不是确定绝对极限。远远超出了软件和应用生命周期中可能遇到的价值,但也不会超出大多数数据库的限制。将限制硬编码为应用程序中的常量,例如Java中的枚举


关于堆栈溢出的其他帖子表明,对于查找日期时间值作为未知或尚未确定值的占位符(我认为这是问题的目的)这个问题,没有一个简单明了的答案。

您能解释一下您的用例吗
java.sql.Date
是一个基于
Date
类的糟糕实现,而且在任何情况下,每个DBMS都有自己的
Date
含义及其范围的定义。那么你为什么需要这些价值观呢?这是为了调查一些客户。管理员用户可以选择用户创建的最大和最小日期。但他不必这么做。因此,如果他不选择,我必须在我的sql请求中输入最短和最长日期。那么,为什么不为管理员不限制日期的情况构建一个不同的查询?@Kvasir用户帐户的最短创建日期将是您首次启动系统时。最大值为当前时刻。
timestamp = -10 date = Thu Jan 01 00:59:59 CET 1970
timestamp = -100 date = Thu Jan 01 00:59:59 CET 1970
timestamp = -1000 date = Thu Jan 01 00:59:59 CET 1970
timestamp = -10000 date = Thu Jan 01 00:59:50 CET 1970
timestamp = -100000 date = Thu Jan 01 00:58:20 CET 1970
timestamp = -1000000 date = Thu Jan 01 00:43:20 CET 1970
timestamp = -10000000 date = Wed Dec 31 22:13:20 CET 1969
timestamp = -100000000 date = Tue Dec 30 21:13:20 CET 1969
timestamp = -1000000000 date = Sat Dec 20 11:13:20 CET 1969
timestamp = -10000000000 date = Sun Sep 07 07:13:20 CET 1969
timestamp = -100000000000 date = Mon Oct 31 15:13:20 CET 1966
timestamp = -1000000000000 date = Sun Apr 24 23:13:20 CET 1938
timestamp = -10000000000000 date = Mon Feb 10 07:13:20 CET 1653
timestamp = -100000000000000 date = Thu Feb 26 15:13:20 CET 1200
timestamp = -1000000000000000 date = Tue Nov 16 23:13:20 CET 29720
timestamp = -10000000000000000 date = Sun Feb 01 07:13:20 CET 314912
timestamp = -100000000000000000 date = Mon Mar 08 15:13:20 CET 3166840
timestamp = -1000000000000000000 date = Sun Feb 24 23:13:20 CET 31686119
timestamp = -10000000000000 date = 1653-02-10
timestamp = -100000000000000 date = 1200-02-26
timestamp = -1000000000000000 date = 720-11-16
timestamp = -10000000000000000 date = 912-02-01
timestamp = -100000000000000000 date = 840-03-08
timestamp = -1000000000000000000 date = 119-02-24
timestamp = 8446744073709551616 date = 634-03-09
timestamp = -7766279631452241920 date = 582-01-06