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