在Java Joda Time中使用“isBefore”进行日期比较

时间:2012-03-07 21:52:50

标签: java datetime jodatime

是否有办法只将 DateTime 对象的日期与 isBefore 函数进行比较?

例如,

DateTime start = new DateTime(Long.parseLong(<someInput>));
DateTime end   = new DateTime(Long.parseLong(<someInput>));

现在,当我这样做时,

while (start.isBefore(end)) { 
   // add start date to the list
   start = start.plusDays(1);
}  

这导致行为不一致(对于我的场景),因为它也考虑了时间,而我想要的只是使用isBefore比较日期。我有办法做到吗?

请告诉我。

谢谢!

5 个答案:

答案 0 :(得分:21)

如果您只想比较日期,可能需要使用LocalDate课程,而不是DateTime

JodaTime文档相当不错:http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalDate.html

答案 1 :(得分:9)

另一个策略是格式化它。

DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
DateTime newStart = df.parse(start);
DateTime newEnd = df.parse(end);

while (newStart.isBefore(newEnd)) { 
  // add start date to the list
  newStart = newStart.plusDays(1);
}    

答案 2 :(得分:1)

切换到使用LocalDate而不是DateTime。 JodaTime中的概念是“部分”(参见ReadablePartial接口)。

答案 3 :(得分:1)

这是一个很老的问题,但是值得添加答案!考虑到我们在Java 8中对日期时间操作提供了出色的支持,最近几天不希望使用Joda-time。如果仍然需要使用joda-time,请在compareTo类中使用LocalDate方法。

  

将此部分与另一个返回的整数进行比较,该整数指示   订购。按从大到小的顺序比较字段。的   第一个不相等的字段用于确定结果。

     

指定的对象必须是其字段类型为局部的实例   与此部分匹配。

可以找到here的官方Java文档。

答案 4 :(得分:0)

您可以在解析后将DateTime的时间设置为零(这意味着午夜):

// withTime sets hours, minutes, seconds, milliseconds
DateTime start = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);
DateTime end   = new DateTime(Long.parseLong(<someInput>)).withTime(0, 0, 0, 0);

或者使用其他Joda Time课程之一;不仅仅是DateTime!如果您只处理日期,则可能需要使用LocalDate代替DateTime