【问题标题】:Java 8 Date equal null safe [duplicate]Java 8日期等于空安全[重复]
【发布时间】:2019-04-10 01:23:32
【问题描述】:

检查两个Date() 对象是否相等,具有空安全功能的最佳方法是什么? 日期 d1 日期 d2

d1 = null, d2 = new Date() => equal false
d1 = null, d2 = null => equal true
d1 = SAME_INSTANT, d2 = SAME_INSTANT => equal true
d1 = new Date(), d2 = YESTERDAY => equal false

【问题讨论】:

  • d1 = new Date(), d2 = new Date() 可能会在午夜时分返回false ;)
  • @Thomas 因为这是遗留的Date 类,它实际上表示以毫秒为单位的日期时间,因此每毫秒出现一次获得两个不相等实例的机会。在我的机器上,循环 do {} while(new Date().equals(new Date())); 在几毫秒(五到四十之间)内完成。
  • 为什么还要使用Date 类?它的设计很糟糕,现在已经过时了。请改用 java.time, the modern Java date and time API, 中的 Instant

标签: java java-8 date


【解决方案1】:
Optional.ofNullable(d1).map(d -> d.equals(d2)).orElseGet(() -> d2 == null);

当其中一个为空时有效

【讨论】:

    【解决方案2】:

    使用Objects.equals(d1, d2):

    如果参数彼此相等,则返回 true,否则返回 false。因此,如果两个参数都为 null,则返回 true;如果恰好一个参数为 null,则返回 false。否则,使用第一个参数的 equals 方法确定相等。

    【讨论】:

      【解决方案3】:

      从 java-7 开始,使用:

      Objects::equals
      

      如果可以,请停止使用java.util.Date;当你想要Date 时使用Instant - 更容易使用并且更不容易出错。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-18
        • 2022-07-02
        • 1970-01-01
        • 2020-12-14
        • 2021-03-06
        • 2011-11-06
        • 1970-01-01
        相关资源
        最近更新 更多