TL;日時においてDR
Interval.of(start.toInstant() , stop.toInstant()).contains(Instant.now())
半開
取り扱い、半開アプローチは、一般に、時間のスパンを定義するために使用されます。最初は()ですが、末尾は()です。 1週間は、月曜日の最初の瞬間から開始し、まで実行されますが、次の月曜日の最初の瞬間であるは含まれていません。このハーフオープンアプローチは直感的に使用されることがあります.12:1のランチ期間は正午のストロークで開始しますが、の前にはの時計が午後1時に起きます。ハーフ・オープンを使用すると、日々の作業の中で一貫してロジックとプログラミングをよりクリーンに、より明確に、よりシンプルにすることができます。
だからあなたのロジックがあるべきで、「始まりとなりました前に、今終了前にされていないです」。 「not before」は、「OR is after」というコンパクトな表現であることに注意してください。
boolean isNowBetweenDateTime = (! now.before(startTime)) && now.before(endTime) ; // Not before start AND is before stop.
ZonedDateTime
質問やその他の回答は今java.timeクラスに取って代わら面倒な古いレガシー日時クラスを使用します。
ZonedDateTime
クラスは、割り当てられたタイムゾーンを持つタイムライン上の瞬間を表します。
ZoneId z = ZoneId.of("America/Montreal");
ZonedDateTime now = ZonedDateTime.now(z);
ZonedDateTime start = now.minusWeeks(1); // Simulating input.
ZonedDateTime stop = now.plusWeeks(2); // Simulating input.
ロジックを自分で書き込んで、間にあるかどうかをテストすることができます。
Interval
、この種の仕事の多くを行う場合は
Boolean isBetween = (! now.isBefore(start)) && stop.isBefore(stop);
、
ThreeTen-Extraプロジェクトを見てください。このライブラリは、追加の機能を持つjava.timeクラスを拡張します。具体的には
Interval
クラスが役立ち、タイムライン上のモーメントのペアを表します。
contains
,
encloses
,
abuts
および
overlaps
などのさまざまな比較方法を実装します。
Interval
をInstant
のオブジェクトでインスタンス化します。 Instant
はタイムライン上の瞬間をUTCに表します。各ZonedDateTime
オブジェクトからInstant
オブジェクトを抽出できます。
Interval interval = Interval.of(start.toInstant() , stop.toInstant());
Boolean isBetween = interval.contains(now.toInstant()); // Or pass `Instant.now()`.
またInstant.now()
を呼び出してInstant
として、現在の瞬間を得ることができます。
java.time
についてjava.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.Date
、.Calendar
、& java.text.SimpleDateFormat
などの面倒な古い日時クラスに取って代わります。
にあるJoda-Timeプロジェクトは、java.timeへの移行を推奨しています。
詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。
java.time機能ThreeTen-BackportでJava 6 & 7に戻って、移植、さらにThreeTenABPでAndroidに適合されているの多く(How to use…を参照)。
ThreeTen-Extraプロジェクトは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
などの便利なクラスがあります。
1つの繊細さ - これは予想通りに機能しない可能性があります。現在は2月29日で、4年に1回発生します。しかし、それはOPのための懸念ではないかもしれません。 –
今は2月29日であればなぜうまくいかないのですか? – aioobe
私は、OPが2月29日のようにまれにしか起こらないことを認識していない可能性があるので、2つの任意の日付の間にあるかどうか尋ねるのは賢明ではありません。もう1つの例はうるう秒(http://en.wikipedia.org/wiki/File:Leapsecond.png)であり、それはまれにしか起こりません。 –