Joda DateTime等于vs isEqual

Sac*_*rma 8 java datetime jodatime

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

log.info("comparing:"+abrDateTime+": and :"+breakStart+":"+abrDateTime.equals(breakStart));
Run Code Online (Sandbox Code Playgroud)

这打印

comparing:2015-07-14T12:25:47.000+05:30: and :2015-07-14T12:25:47.000+05:30:false
Run Code Online (Sandbox Code Playgroud)

使用DateTime.isEqual时

log.info("comparing:"+abrDateTime+": and :"+breakStart+":"+abrDateTime.isEqual(breakStart));
Run Code Online (Sandbox Code Playgroud)

打印:

comparing:2015-07-14T12:25:47.000+05:30: and :2015-07-14T12:25:47.000+05:30:true
Run Code Online (Sandbox Code Playgroud)

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

注意:两个实例都具有相同的毫秒和相同的时区,如您在打印中看到的那样.

kuc*_*ang 11

首先,您可能需要检查代码,因为您提供的代码段是打印相同的对象(即abrDateTime),然后在equalsisEqual方法中比较abrDateTimewith breakStart对象.

其次,在这样的时候,最好的方法是检查API文档.对于equals,doc说:

根据毫秒即时,时间和时区,将此对象与指定对象进行相等性比较

isEqual,doc状态:

这个瞬间是否等于仅通过毫秒比较的瞬间

所以,选择的是,你想根据时间来检查时间吗?然后去isEqual方法.或者,如果您还要检查时区和年表,那么请继续equals


编辑:

处理你的评论,

  1. 年表和为什么需要比较=>从文档中获取

    年表提供对时间日历系统的各个日期时间字段的访问.

    因此,您可以将其Chronology视为包含特定日历系统的日期和时间字段的类.(如ISO,格里高利,佛教等)

    这是必要的,因为您不想比较两个日期,而是在不同的日历系统中.例如,在伊斯兰日历系统中,6月的第一个格里高利将是14个SHa`baan(这是我的意见所以它可能与API作者的意图不同,原因没有记录)

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