我想知道如何在兩次之間執行一個函數,比如上午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