在java中获取最大Date值的最佳方法是什么?

jth*_*thg 56 java datetime

我正在编写一些逻辑,要求将空日期视为将来永远的意义(有关日期是一个到期日期,可能存在也可能不存在).我希望只将null转换为最大可能的Date,而不是在整个代码中为null日期添加特殊情况.我没有看到任何明显的方法来获得这样的价值而不用硬编码.什么是获得使用Date实现的最大值的最佳方法?

cjs*_*hno 106

尝试

new Date(Long.MAX_VALUE)
Run Code Online (Sandbox Code Playgroud)

它应该为您提供Java中可能的最长日期值.

  • 大声笑......好吧,在这种情况下,至少Date值是将来到目前为止,无论哪种方式,它仍应被视为无法访问."Sun Aug 17 00:12:55 MST 292278994"在当前的Java 6 impl下.如果你的代码仍然存在于292278994,我会留下深刻印象.:-) (29认同)
  • 只是为了扮演魔鬼的拥护者......这个解决方案仍然假设Date对象的实现.如果我的代码在远期未来的某个时候在java版本9中编译怎么办?Date升级为能够代表年份quattuordecillion,但是需要很长时间的构造函数仅限于原始的64位日期范围... (7认同)
  • 仅当TimeZone设置为UTC时 (3认同)
  • @jthg有一个好处。应该有一个“ Date.MAX_VALUE” (2认同)

Tom*_*Tom 21

使用Long.MAX_VALUE将您想要的功能封装在您自己的类中,很可能会导致您遇到问题.

class ExpirationDate {
    Date expires;

    boolean hasExpiration() {
        return expires == null;
    }

    Date getExpirationDate() {
        return expires;
    } 

    boolean hasExpired(Date date) {
        if (expires == null) {
            return true;
        } else {
            return date.before(expires);
        }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)


Tre*_*son 6

+1到Long.MAX_VALUE建议.如果您按日期字段对事物进行排序,这似乎会对您有所帮助.

但是,不是在需要日期的某个大常量值中构造日期,而是使用全局可见的单例来保存表示特殊值的Date实例:

class DateUtil
{
  public static final Date NO_EXPIRE = new Date( Long.MAX_VALUE );
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用简单的身份比较(mydate == DateUtils.NO_EXPIRE)来测试特定日期是否属于您的特殊情况,而不是obj.equals(); (即mydate.equals(DateUtils.NO_EXPIRE);)

  • @JarrodRoberson不正确,时区无关紧要.A**java.util.Date始终为UTC**.此答案正确地确定了java.util.Date对象可以表示的最后时刻.你的评论还有其他方面我误解了吗? (2认同)