执行两次jodatime之间的功能

时间:2013-02-21 18:05:10

标签: java jodatime

我想知道如何在两次之间执行一个功能,比如早上6点和下午3点?出于测试目的,我有以下代码,但我确信有更好的方法来做我想要的。

if(dt.getHourOfDay() > 12 && dt.getHourOfDay()+dt.getMinuteOfHour() < 13){ // execute function }

代码,只检查小时是否为12,时间是否在12到12:01之间。

你能告诉我更好地实现我想要的吗?

感谢。

3 个答案:

答案 0 :(得分:1)

首先,在您的示例中,为简单起见,您需要这样做:

if (dt.getHourOfDay() == 12 && dt.getMinuteOfHour() == 0) {

}

或者也许:

if (dt.getHourOfDay() == 12 && dt.getMinuteOfHour() >= 0 && dt.getMinuteOfHour() < 1) {

}

如果您不想直接比较,可以创建两个与您想要的时间相对应的时刻,并使用AbstractInstant的isBefore和isAfter方法,或isBeforeNow,isAfterNow。类似的东西:

Instant todayMidnight = new DateMidnight().toInstant();
Instant earliest = todayMidnight.plus(Hours.hours(6).toStandardDuration());
Instant latest = todayMidnight.plus(Hours.hours(15).toStandardDuration());
if (latest.isAfterNow() && earliest.isBeforeNow()) {
  // Execute 
}

因为你必须反复构建今天的夜间物体,所以有点愚蠢,但是很清楚你正在做什么。

但你究竟想做什么?你想尝试像时尚一样的“cron”吗?或限制访问某些代码到一天中的某些时间?取决于,可能有更好的方法。

答案 1 :(得分:0)

我真的会调查一个调度库,这种东西可以通过时区,DST等快速复杂化。

答案 2 :(得分:-1)

这是我的解决方案。理解它并不短,但更明显。

int secBetween = Seconds.secondsBetween(new LocalTime(12, 0), dt.toLocalTime()).getSeconds(); 
if ( secBetween > 0 && secBetween < 60) { ... }