使用Joda,如何确定给定日期是否在时间x和比x早3小时的时间之间?

Ale*_*x B 23 java jodatime

使用Joda时间并获得类似以下行为的最简单方法是什么:

public boolean check( DateTime checkTime )
{
    DateTime someTime = new DateTime(); //set to "now" for sake of example
    return checkTime.isBefore( someTime ) && checkTime.notMoreThanThreeHoursBefore( someTime );
}
Run Code Online (Sandbox Code Playgroud)

因此,如果someTime设置为15:00并checkTime设置为12:15,则应返回true.

如果someTime设置为15:00并checkTime设置为11:45,则应该返回false,因为checkTime它超过3小时someTime.

如果someTime设置为15:00并checkTime设置为15:15,则应该返回false,因为checkTime它在之后someTime.

Ale*_*x B 49

经过一些游戏,我发现这很好看:

return new Interval( someTime.minusHours( 3 ), someTime ).contains( checkTime );
Run Code Online (Sandbox Code Playgroud)

  • 是的,好的电话.我忘记了Interval.方便它包括开始和独家的结束:) (4认同)

Jon*_*eet 6

简单:

DateTime someTime = new DateTime();
DateTime earliest = someTime.minusHours(3);

if (earliest.compareTo(checkTime) <= 0 && checkTime.compareTo(someTime) < 0)
Run Code Online (Sandbox Code Playgroud)

我用过compareTo没有isBeforeOrEqualisAfterOrEqual- 但你可以使用compareTo任何关系.

我怀疑这只是minusHours你在追求:)

  • 你可以通过`!y.isAfter(x)`做``x.isBeforeOrEqual(y)` - 虽然它有点迟钝. (8认同)
  • @dty其实这是错的!因为`x.isBeforeOrEqual(y)`意味着`y`不是**`x'之前的**.这对应于:`!y.isBefore(x)`.这个评论在这里停留了5年多,没有人注意到这个错误.哇! (2认同)