Joda DateTime equals vs isEqual



我有两个类似的日期,我对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

While with 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吗?

注意:两个实例得到相同的millis和相同的时区,您可以在打印中看到。

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

第二,在这种情况下,最好的方法是检查API文档。对于等号,文档声明:

根据毫秒瞬间、时间顺序和时区将此对象与指定对象进行比较,以确定是否相等

和isEqual,文档声明:

这个瞬间是否等于仅以毫秒为单位进行比较的瞬间?

因此,选择是,您是否希望仅根据其时间检查时间?然后用isEqual方法。或者,如果您还想检查时区和时间顺序,则使用equals


编辑:

解决你的评论,

  1. 年表和为什么需要比较=>摘自doc

    Chronology为按时间顺序的日历系统提供了对单个日期时间字段的访问。

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

    这是必需的,因为你不想比较两个日期,但在不同的日历系统。例如,在伊斯兰历法系统中,格里高利历的6月1日是夏班14日(这是我的观点,因此可能与API作者的意图不同,因为没有记录原因)

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

ReadableInstant (DateTime的超类)的equals方法也合并了Chronology,而isEqual严格地查看时间上的瞬间(自epoch以来的毫秒)。在您的示例中,两个对象具有不同的Chronology s。

来自Javadocs:

根据毫秒瞬间和Chronology将此对象与指定对象进行比较是否相等。所有的ReadableInstant实例都被接受。

比较两个瞬间的绝对时间(如:使用isEqual(ReadableInstant)或Comparable.compareTo(Object)。

相关内容

  • 没有找到相关文章

最新更新