Java Joda DateTime等于vs isEqual
我有两个相似的日期,我怀疑Joda DateTime api提供的比较:Java Joda DateTime等于vs isEqual,java,datetime,jodatime,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("co
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
注意:这两个实例的毫秒和时区与您在打印中看到的相同。首先,您可能需要检查您的代码,因为您给出的代码片段正在打印相同的对象(即
abdatetime
),但是,在equals
和isEqual
方法中,将abdatetime
与breakStart
对象进行比较
其次,在这种情况下,最好的方法是检查API文档。
对于,文档声明:
将此对象与指定对象进行比较,以根据毫秒瞬间、时间顺序和时区确定相等性
并且,文档声明:
这个瞬间是否等于以毫秒为单位传递的瞬间
所以,我们的选择是,您想只根据时间来检查时间吗?然后使用isEqual
方法。或者,如果您还想检查时区和时间顺序,则使用equals
编辑: 针对您的评论
年表
视为包含特定日历系统的日期和时间字段的类。(如ISO、格里高利、佛教徒等)
它是必需的,因为您不想比较两个日期,而是在不同的日历系统中。例如,在伊斯兰历法系统中,公历的6月1日是(这是我的观点,因此可能与API作者的意图不同,因为原因没有记录在案)isEqual
方法ReadableInstant
(日期时间的超类DateTime
)的equals
方法也包含了年表
,而isEqual
严格地以时间(从纪元开始的毫秒)来查看瞬间。在您的例子中,这两个对象具有不同的年表
从:
将此对象与指定对象进行比较,以根据毫秒瞬间和时间顺序确定相等性。接受所有ReadableInstant实例
要比较绝对时间的两个瞬间(即UTC毫秒忽略时间顺序),请使用isEqual(ReadableInstant)或Comparable.compareTo(Object)
@真怀疑论者不,我不认为我在印刷同样的东西。如果您能看到任何打字错误,请更正问题。您能提供创建这些日期时间对象的可复制代码吗?日志消息应显示“比较”+abdatetime
+“和”+breakStart
,这就是打字错误。是的。拿到了,换了。对不起,谢谢。谢谢@kucing,只是我不明白该死的年表是什么意思,为什么需要比较。比较毫秒和时区应该可以做到这一点。@sachin。把它想象成日历系统。例如朱利安、iso等。您可以在这里查看