DB/Rest 支持 Java 日历/日期最小值
Posted
技术标签:
【中文标题】DB/Rest 支持 Java 日历/日期最小值【英文标题】:Java Calendar/Date Minvalue Supported on DB/Rest 【发布时间】:2016-11-28 10:03:35 【问题描述】:我正在使用 Spring Boot 和 HSQLDB 文件, 当我使用时:
calendar.setTimeInMillis(-9223372036854775808L);
calendar.setTime(new Date(Long.MIN_VALUE));
并存储模型,
在我调用休息客户端后,我得到无效日期,当我检查它时,它返回一些正值而不是负值:|我应该使用什么作为 min_Value。
我认为这可能是 SQL 问题,我将临时变量类型从时间跨度更改为日期,但没有再次工作,我不再确定这个问题是什么情况,我应该使用什么 nuber,每个人都在谈论关于最小值,有人谈到 -8 左右.......L 也适用于 JS,但在这里也不起作用:|
【问题讨论】:
在 SQL-92 中,年份必须介于 -9999 和 9999 之间。只需选择过去的随机日期作为最小值(第 1 年的 1 月 1 日?-9999 年的 1 月 1 日?)。请注意,根据确切的列类型和数据库,有效范围可能会受到更多限制。如果你想表示一个不存在的值,你也可以考虑使用 NULL。 @assylias SQL-92 年份必须介于 1 和 9999 之间。在 Java 中,1970-01-01 之前的日期具有负毫秒值。 @assylias 没用... @deadManN 尝试使用 1970-01-01 的 0L 作为最小值 @fredt true,这个工作,我在问之前就完成了,但这不是最小值 【参考方案1】:避免使用古老的日期时间值
不使用该最小数字作为日期值的原因有很多。正如所评论的,标准 SQL 不允许如此古老的日期。我所知道的没有数据库实现支持该值。使用日期时间作为历史值会带来很多问题和问题,而且是不明智的。
使用 epoch 作为标志值
如果您正在寻找一个任意值来用作标志,例如“没有预期的值”,同时避免使用空值,那么我建议在 UTC 中使用 1970 年第一刻的 Java 和 Unix epoch。如果您知道您的系统永远不会将任何日期时间存储为有效值,那么这将运行良好。而1970-01-01T00:00:00Z
很容易被许多程序员、DBA 和系统管理员识别为共同的时代,因此可能是一个特殊的值。
java.time
避免使用Date
和Calendar
类。这些麻烦的类和它们的兄弟现在是遗留的,被 java.time 类所取代。
这些类包括该时期值的常量:Instant.EPOCH
类似问题:Minimum date in Java
【讨论】:
以上是关于DB/Rest 支持 Java 日历/日期最小值的主要内容,如果未能解决你的问题,请参考以下文章