如何检查我们现在是否在2个datetime对象之间?

时间:2019-04-11 17:40:04

标签: java jodatime utc

我有一个对象,该对象具有开始日期时间和结束日期时间

class MyObject {  
   DateTime start;  
   DateTime end;  

   public MyObject(String isoUtcStart, String isoUtcEnd) {
      this.start = new DateTime(isoUtcStart);  
      this.end = new DateTime(isoUtcEnd);  
   }  
} 

我想要确定的是我们现在是否处于这些时刻范围内。
我这样做如下:

public boolean isWithinCurrentTime(MyObject o) {  
     DateTime now = DateTime.now(DateTimeZone.UTC);
     return (o.getStart().isBefore(now) || o.getStart().isEqual(now))
                    && (o.getEnd().isAfter(now) || o.getEnd().isEqual(now));  
}  

不过,这似乎有些矫kill过正。有没有更好的办法?我的意思是:

  1. 是否有类似isBeforeOrEqual的东西?找不到这样的方法
  2. o.getStart().isBeforeNow()有什么区别吗?不确定是否相同,即UTC比较
  3. 转向long比较(getmillis)是一种更明智的方法吗?

2 个答案:

答案 0 :(得分:1)

使用joda的Interval类表示[start;end)时间间隔。然后检查此时间间隔是否包含指定的时刻。

Interval interval = new Interval(o.getStart(), o.getEnd());
interval.contains(DateTime.now(DateTimeZone.UTC))

或者您可以尝试使用interval.containsNow()而不显式传递now

答案 1 :(得分:0)

有。

导入日期类java.util.Date

利用这些方法

date1.after(date2)–如果date1在date2之后,则返回true;否则返回true。否则为假。

date1.before(date2)–如果date1在date2之前,则返回true;否则返回true。否则为假。

date1.compareTo(date2)