是否有办法只将 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比较日期。我有办法做到吗?
请告诉我。
谢谢!
答案 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
。