我想知道如何在两次之间执行一个函数,比如上午6点和下午3点?出于测试目的,我有下面的代码,但我相信有更好的方法来做我想做的事情。两次执行函数jodatime
if(dt.getHourOfDay() > 12 && dt.getHourOfDay()+dt.getMinuteOfHour() < 13){ // execute function }
的代码,只检查如果小时12,并且如果时间时间为12和12:01之间。
你能告诉我一个更好的实现我想要的吗?
谢谢。
我想知道如何在两次之间执行一个函数,比如上午6点和下午3点?出于测试目的,我有下面的代码,但我相信有更好的方法来做我想做的事情。两次执行函数jodatime
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对象,但whaty ou're非常清楚这样做。
但是你究竟想要做什么?你是否想要像时尚一样在“cron”中运行某些东西?或者将某些代码的访问权限限制在一天的特定时间?取决于,可能有更好的方法。
这是我的解决方案。这并不短,但更明显的理解。
int secBetween = Seconds.secondsBetween(new LocalTime(12, 0), dt.toLocalTime()).getSeconds();
if (secBetween > 0 && secBetween < 60) { ... }
我真的会考虑调度库,这种东西可以与时区,DST等
基本上,我想运行早上6点到下午3点之间的程序复杂,真快。该计划的前提是要找到那些时间之间的天气。 – 2013-02-21 19:00:32
恐怕你第二个代码不起作用我收到以下消息:“类型即时类型中的方法加(长)不适用于参数(小时)” – 2013-02-22 12:33:27
ETA:toStandardDuration(),我认为它应该修复它。 (无论如何我都没有编译它)。 – James 2013-02-22 16:07:19