0

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

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

该代码仅检查小时是否为 12 以及时间是否在 12 到 12:01 之间。

你能告诉我一个更好的实现我想要的东西吗?

谢谢。

4

3 回答 3

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 
}

有点笨拙,因为您必须反复构造 todayMidnight 对象,但非常清楚您在做什么。

但你实际上想做什么?您是否正在尝试以“cron”之类的方式运行某些东西?或者将某些代码的访问权限限制在一天中的特定时间?视情况而定,可能有更好的方法。

于 2013-02-21T18:50:27.477 回答
0

我真的会研究一个调度库,这种东西可能会因为时区、夏令时等而变得非常复杂。

于 2013-02-22T16:09:56.673 回答
-1

这是我的解决方案。它不是更短,而是更容易理解。

int secBetween = Seconds.secondsBetween(new LocalTime(12, 0), dt.toLocalTime()).getSeconds(); 
if ( secBetween > 0 && secBetween < 60) { ... }
于 2013-02-21T18:49:57.600 回答