Joda-Time是否有一个名为isToday的方法

时间:2014-02-10 04:33:39

标签: java datetime jodatime

我需要检查一下给定的时间戳是否为今天。我正在使用Joda-Time。有没有方法或简单的方法来检查这个?什么Joda-Time课程更适合这个? LocalDateDateTime

8 个答案:

答案 0 :(得分:29)

日期可以通过单一陈述进行比较,以便您需要特殊功能。

dateTimeDateTime()

的对象时

if((dateTime.toLocalDate()).equals(new LocalDate()))
datejava.util.date

的对象时

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

什么Joda-time类更适合这个? LOCALDATE的?日期时间?

了解您需要知道什么是LocalDate和DateTime。

  

LocalDate()是一个不可变的日期时间类,表示没有的日期   时区。所以没有时间参与。

     

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

因此,如果您需要比较日期和时间,请更好地使用datetime,如果您只需要查看必须使用localDate的日期,因为日期时间会产生false如果使用.equal运算符,除非包含秒部分的时间对于两个对象都相同。

答案 1 :(得分:13)

以下是检查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;
}

答案 2 :(得分:10)

一种可能性是创建一个覆盖整个相关日期的间隔,然后检查此间隔中是否包含各种时间戳。​​

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

  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...

答案 3 :(得分:3)

建议的方法是:

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

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

答案 4 :(得分:1)

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

最简单的方法是使用时间戳构建两个DateTime,使用今天日期构建另一个,然后比较dayOfYear()的日和year()的年份,但要记住两个日期是否都是在UTCLocal 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");
}

答案 5 :(得分:1)

Joda时间实际上有一个方法:

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

答案 6 :(得分:1)

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

答案 7 :(得分:-1)

我发现最简单的方法:

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