Joda-Time有没有一个叫做isToday的方法



我需要检查给定的时间戳是否是今天。我正在使用Joda-Time。有没有一种方法或简单的方法来检查这一点?哪个乔达时间课程更适合这个?本地日期?日期时间?

日期可以通过单个语句进行比较,因此为什么您需要特殊功能。

dateTimeDateTime()的对象时

if((dateTime.toLocalDate()).equals(new LocalDate()))

datejava.util.date的对象时

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

哪个乔达时间课程更适合这个?本地日期?日期时间?

了解您需要知道什么是本地日期和日期时间。

LocalDate()是一个不可变的 datetime 类,表示没有 时区。所以没有时间部分。

DateTime()是不可修改日期时间的标准实现 .class。 它具有日期的所有属性,其中包括datetimetimezone

因此,如果您需要比较日期和时间,最好使用datetime,如果您只需要检查日期,则必须使用localDate因为如果使用.equal运算符,日期时间将产生false,除非包括秒部分在内的时间对于两个对象相同。

以下是一些简单的方法来检查日期时间是今天、明天还是昨天:

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;
}

一种可能性是创建一个覆盖整个问题的时间间隔,然后检查该间隔中是否包含各种时间戳。

构造初始间隔可能如下所示:

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)) {
}

我认为你需要 Joda 2.5 来做到这一点,但这应该可以解决问题。

我喜欢@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));
}

AFAIK 没有直接的方法可以检查日期是否为今天日期。

最简单的方法是构造两个DateTime一个带有时间戳,另一个带有今天的日期,然后比较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");
}

Joda Time 实际上有一个方法:

DateUtils#isToday(ReadablePartial);
DateUtils#isToday(ReadableInstant);

我发现的最简单的方法:

public boolean isToday(DateTime dateTime) {
return dateTime.withTimeAtStartOfDay().getMillis() ==
new DateTime().withTimeAtStartOfDay().getMillis();
}

相关内容

最新更新