web-dev-qa-db-ja.com

Joda-TimeにはisTodayというメソッドがありますか

特定のタイムスタンプが今日かどうかを確認する必要があります。 Joda-Time を使用しています。これを確認する方法や簡単な方法はありますか?これに適したJoda-Timeクラスはどれですか? LocalDateDateTime

15
learner

日付は1つのステートメントで比較できるため、特別な関数が必要な理由。

dateTimeDateTime()のオブジェクトである場合

_if((dateTime.toLocalDate()).equals(new LocalDate()))
_

dateが_Java.util.date_のオブジェクトである場合

_ if((new DateTime(date).toLocalDate()).equals(new LocalDate()))
_

これに適したJoda-timeクラスはどれですか?LocalDate?DateTime?

LocalDateとDateTimeとは何かを知る必要があるという理解。

LocalDate()は、タイムゾーンのない日付を表す不変の日時クラスです。だから、時間の部分がありません。

DateTime()は、変更不可能な日時クラスの標準実装です。 datetimetimezoneを含むDateのすべての属性を持っています。

したがって、日付と時刻の両方を比較する必要がある場合はdatetimeを使用し、日付を確認する必要がある場合はlocalDateを使用する必要があります。日時はfalseを生成するためです。 _.equal_演算子が使用されている場合、秒の部分を含む時間が両方のオブジェクトで同じでない限り。

30
Dileep

DateTimeが今日、明日、または昨日であるかどうかを確認する簡単な方法を次に示します。

public boolean isToday(DateTime time) {
   return LocalDate.now().compareTo(new LocalDate(time)) == 0;
}

public boolean isTomorrow(DateTime time) {
   return LocalDate.now().plusDays(1).compareTo(new LocalDate(time)) == 0;
}

public boolean isYesterday(DateTime time) {
   return LocalDate.now().minusDays(1).compareTo(new LocalDate(time)) == 0;
}
15
JustinMorris

1つの可能性は、問題の1日をカバーする間隔を作成し、さまざまなタイムスタンプがこの間隔に含まれているかどうかを確認することです。

初期間隔の作成は次のようになります。

  Interval today = new Interval(DateTime.now().withTimeAtStartOfDay(), Days.ONE);

次に、タイムスタンプを次のように確認できます。

  today.contains(DateTime.now());                  // True
  today.contains(DateTime.now().minusDays(1));     // False
  today.contains(DateTime.now().plusDays(1));      // False
  today.contains(someOtherTimeStamp.toDateTime()); // And so on...
10
msandiford

これを行うための推奨される方法は次のとおりです。

DateTime midnightToday = DateTime.now().withTimeAtStartOfDay();
DateTime myDateTime = <whatever>;
if(myDateTime.isAfter(midnightToday)) {
}

これを行うにはJoda2.5が必要だと思いますが、それでうまくいくはずです。

3
colin

ジョーダ時間は実際にこれのための方法を持っています:

DateUtils#isToday(ReadablePartial);
DateUtils#isToday(ReadableInstant);
1
Nicklas A.

AFAIKには、日付が今日の日付であるかどうかを確認できる直接的な方法はありません。

最も簡単なアプローチは、2つのDateTimeを1つはタイムスタンプで、もう1つは今日の日付で作成し、dayOfYear()の日とyear()の年を比較することですが、両方かどうかを覚えておいてください。日付はUTCまたはLocal Time Zoneにあります。
小さなサンプル、

DateTime date = new DateTime(TimeStamp);
DateTime todayDate = new DateTime();

if(date.dayOfYear().get() == todayDate.dayOfYear().get() && date.year().get() == todayDate.year().get())
{
    System.out.println("Date is today date");
}
1
dbw

@JustinMorrisの答えが好きです。しかし、私はこれがさらに良いことに気づきました:

public static boolean isToday(DateTime time) {
    return LocalDate.now().equals(new LocalDate(time));
}

public static boolean isTomorrow(DateTime time) {
    return LocalDate.now().plusDays(1).equals(new LocalDate(time));
}

public static boolean isYesterday(DateTime time) {
    return LocalDate.now().minusDays(1).equals(new LocalDate(time));
}
1
Rik van Velzen