我想知道如何在两次之间执行一个函数,比如早上 6 点和下午 3 点?出于测试目的,我有下面的代码,但我确信有更好的方法来做我想做的事。
if(dt.getHourOfDay() > 12 && dt.getHourOfDay()+dt.getMinuteOfHour() < 13){
// execute function
}
该代码仅检查小时是否为 12 以及时间是否在 12 到 12:01 之间。
你能告诉我一个更好的实现我想要的东西吗?
谢谢。
首先,在您的示例中,为了简单起见,您希望这样做:
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”之类的方式运行某些东西?或者将某些代码的访问权限限制在一天中的特定时间?视情况而定,可能有更好的方法。
我真的会研究一个调度库,这种东西可能会因为时区、夏令时等而变得非常复杂。
这是我的解决方案。它不是更短,而是更容易理解。
int secBetween = Seconds.secondsBetween(new LocalTime(12, 0), dt.toLocalTime()).getSeconds();
if ( secBetween > 0 && secBetween < 60) { ... }