Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Joda DateTime等于vs isEqual_Java_Datetime_Jodatime - Fatal编程技术网

Java Joda DateTime等于vs isEqual

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

我有两个相似的日期,我怀疑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


注意:这两个实例的毫秒和时区与您在打印中看到的相同。

首先,您可能需要检查您的代码,因为您给出的代码片段正在打印相同的对象(即
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等。您可以在这里查看