我想知道如何在两次之间执行一个功能,比如早上6点和下午3点?出于测试目的,我有以下代码,但我确信有更好的方法来做我想要的。
if(dt.getHourOfDay() > 12 && dt.getHourOfDay()+dt.getMinuteOfHour() < 13){
// execute function
}
代码,只检查小时是否为12,时间是否在12到12:01之间。
你能告诉我更好地实现我想要的吗?
感谢。
答案 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) { ... }