特定のタイムスタンプが今日かどうかを確認する必要があります。 Joda-Time を使用しています。これを確認する方法や簡単な方法はありますか?これに適したJoda-Timeクラスはどれですか? LocalDate ? DateTime ?
日付は1つのステートメントで比較できるため、特別な関数が必要な理由。
dateTime
がDateTime()
のオブジェクトである場合
_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()
は、変更不可能な日時クラスの標準実装です。date
、time
、timezone
を含むDateのすべての属性を持っています。
したがって、日付と時刻の両方を比較する必要がある場合はdatetime
を使用し、日付を確認する必要がある場合はlocalDate
を使用する必要があります。日時はfalse
を生成するためです。 _.equal
_演算子が使用されている場合、秒の部分を含む時間が両方のオブジェクトで同じでない限り。
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;
}
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...
これを行うための推奨される方法は次のとおりです。
DateTime midnightToday = DateTime.now().withTimeAtStartOfDay();
DateTime myDateTime = <whatever>;
if(myDateTime.isAfter(midnightToday)) {
}
これを行うにはJoda2.5が必要だと思いますが、それでうまくいくはずです。
ジョーダ時間は実際にこれのための方法を持っています:
DateUtils#isToday(ReadablePartial);
DateUtils#isToday(ReadableInstant);
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");
}
@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));
}