equals库java.util.Date中的日期比较方法

时间:2015-01-12 09:55:45

标签: java

方法java.util.Date方法.equalsdate format的关注方式是否无动于衷?我的意思是我已尝试使用不同格式的date.beforedate.after并且它们表现正常,但是,我不确定Date.equals,因为我担心它的行为与{{1}相同我正在寻求一个坚定而明确的答案。

4 个答案:

答案 0 :(得分:4)

  

方法java.util.Date方法.equals是否与日期格式无关?

Date对象没有格式 - 它没有信息来自何处的概念。自Unix时代(1970年1月1日,午夜UTC)以来,几毫秒。它也不知道时区。因此,您可以以非常不同的方式创建两个Date个对象,最终代表相同的时间点 - equals将返回true

理解哪些信息是对象的状态并且不是对象状态的一部分非常重要 - 特别是对于日期和时间API,在某些地方它可能是违反直觉的。如有任何疑问,请仔细阅读文档。例如,来自documentation for Date

  

类Date表示特定的时刻,精确到毫秒。

equals

  

比较两个相等的日期。结果为true当且仅当参数不为null且是一个Date对象,表示同一时间点,以毫秒为单位,作为此对象。

     

因此,当且仅当Date方法为两者返回相同的long值时,两个getTime个对象才相等。

答案 1 :(得分:2)

你应该看看Date Class documentation。它声明:

  

public boolean equals(Object obj)比较两个日期是否相等。该   当且仅当参数不为null且为Date时,结果为true   表示相同时间点的对象,以毫秒为单位   这个对象。因此,当且仅当时,两个Date对象是相等的   getTime方法为两者返回相同的long值。

因此,它的行为方式与Object类中的默认等于的行为方式相同。

格式不同且行为正常:由于日期转换为绝对时间,日期格式不会有任何差异。

答案 2 :(得分:1)

java.util.Date只是一个包含long值的包装器,表示自epoch(1970-01-01 00:00:00.00)以来的毫秒数。 equals方法只是比较这些值。

请参阅API

  

比较两个相等的日期。结果是真的,当且仅当   参数不为null,是一个表示相同的Date对象   时间点,以毫秒为单位,作为此对象。因此,两个日期   当且仅当getTime方法返回相同的对象时,对象才相等   两者的长期价值。

source code(OpenJDK):

947     public boolean More ...equals(Object obj) {
948         return obj instanceof Date && getTime() == ((Date) obj).getTime();
949     }

答案 3 :(得分:0)

我猜这会有所帮助。

日期中的等于方法比较两个日期是否相等。当且仅当参数不为null并且是一个Date对象时,结果才为真,该对象表示与此对象相同的时间点,以毫秒为单位。 因此,当且仅当getTime方法为两者返回相同的long值时,两个Date对象才相等。

覆盖:Object中的equals(...) 参数: obj要与之比较的对象。 返回: 如果对象相同则为true;否则是假的。 也可以看看: java.util.Date.getTime()