java - Joda DateTime 等于 vs isEqual

标签 java datetime jodatime

我有两个相似的日期,我对 Joda DateTime api 提供的比较表示怀疑:

log.info("comparing:"+abrDateTime+": and :"+breakStart+":"+abrDateTime.equals(breakStart));

这打印

comparing:2015-07-14T12:25:47.000+05:30: and :2015-07-14T12:25:47.000+05:30:false

在使用 DateTime.isEqual 时

log.info("comparing:"+abrDateTime+": and :"+breakStart+":"+abrDateTime.isEqual(breakStart));

打印:

comparing:2015-07-14T12:25:47.000+05:30: and :2015-07-14T12:25:47.000+05:30:true

问题是我在我的应用程序中到处都使用 DateTime.equals 方法,我应该将它更改为 isEqual 吗?

注意:这两个实例具有相同的毫秒数和相同的时区,如您在打印品中所见。

最佳答案

首先,您可能需要检查您的代码,因为您提供的片段正在打印相同的对象(即 abrDateTime),但是,在 equalsisEqual 方法,您将 abrDateTimebreakStart 对象进行比较。

其次,在这种时候,最好的办法就是查看API文档。 对于 equals ,文档声明:

Compares this object with the specified object for equality based on the millisecond instant, chronology and time zone

isEqual ,文档声明:

Is this instant equal to the instant passed in comparing solely by millisecond

所以,选择是,你想只根据它的时间来检查时间吗?然后使用 isEqual 方法。或者,如果您还想检查时区和年表,请使用 equals


编辑:

处理您的评论,

  1. 时间顺序以及为什么需要进行比较 => 取自 doc

    Chronology provides access to the individual date time fields for a chronological calendar system.

    因此,您可以将 Chronology 视为包含特定日历系统的日期和时间字段的类。 (例如,ISO、公历、佛教等)

    它是必需的,因为您不想比较两个不同日历系统中的日期。例如,假设在伊斯兰历系统中,公历中的六月一日为 14 SHa`baan (这是我的观点,因此可能与 API 作者的意图不同,原因未记录在案)

  2. 如果您只想比较工厂和时区。那么我猜你可以只使用 isEqual 方法。

关于java - Joda DateTime 等于 vs isEqual,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31400088/

相关文章:

java - 从生产环境中删除日志

mysql - 不正确的日期时间值 '0000-00-00 00:00:00' - Date_Sub() in Having

javascript - 在 HTML 文本输入中显示 C# 日期时间

java - 如何将 JodaTime 与 Spring 和 Hibernate 一起使用?

java - 在确保字符串是有效的 double 值时,如何解释 ","和 "."?

java - 如何保存和显示应用程序制作的照片

java - 如果对象 (x,y) 靠近其他对象 (x,y)

java - 在 JAVA 中将 Json 日期时间转换为字符串

java - 将 java.util.Date 转换为 org.joda.time.LocalDateTime 时出现问题

java - JAVA中如何从字符串中获取时区