0

午前 6 時から午後 3 時までの 2 時間の間に関数を実行する方法を知りたかったのです。テスト目的で、以下のコードがありますが、私が望むことを行うにはもっと良い方法があると確信しています。

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

このコードは、時間が 12 であるかどうか、時間が 12 から 12:01 の間であるかどうかをチェックするだけです。

私が望むものを実装するためのより良い方法を教えてください。

ありがとう。

4

3 に答える 3

1

まず、あなたの例では、簡単にするためにこれが必要です:

if (dt.getHourOfDay() == 12 && dt.getMinuteOfHour() == 0) {

}

多分:

if (dt.getHourOfDay() == 12 && dt.getMinuteOfHour() >= 0 && dt.getMinuteOfHour() < 1) {

}

直接比較したくない場合は、必要な時間に対応する 2 つのインスタントを作成し、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」のような方法で何かを実行しようとしていますか? または、一部のコードへのアクセスを特定の時間帯に制限しますか? 場合によっては、もっと良い方法があるかもしれません。

于 2013-02-21T18:50:27.477 に答える
0

私は本当にスケジューリングライブラリを調べます.この種のものは、タイムゾーン、DSTなどで非常に速く複雑になる可能性があります.

于 2013-02-22T16:09:56.673 に答える
-1

これが私の解決策です。短くはありませんが、より明確に理解できます。

int secBetween = Seconds.secondsBetween(new LocalTime(12, 0), dt.toLocalTime()).getSeconds(); 
if ( secBetween > 0 && secBetween < 60) { ... }
于 2013-02-21T18:49:57.600 に答える