2013-02-21 151 views
0

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

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

的代码,只检查如果小时12,并且如果时间时间为12和12:01之间。

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

谢谢。

回答

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对象,但whaty ou're非常清楚这样做。

但是你究竟想要做什么?你是否想要像时尚一样在“cron”中运行某些东西?或者将某些代码的访问权限限制在一天的特定时间?取决于,可能有更好的方法。

+0

基本上,我想运行早上6点到下午3点之间的程序复杂,真快。该计划的前提是要找到那些时间之间的天气。 – 2013-02-21 19:00:32

+0

恐怕你第二个代码不起作用我收到以下消息:“类型即时类型中的方法加(长)不适用于参数(小时)” – 2013-02-22 12:33:27

+0

ETA:toStandardDuration(),我认为它应该修复它。 (无论如何我都没有编译它)。 – James 2013-02-22 16:07:19

-1

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

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

我真的会考虑调度库,这种东西可以与时区,DST等