我需要检查给定的时间戳是否是今天。我正在使用Joda-Time。有没有一种方法或简单的方法来检查这一点?哪个乔达时间课程更适合这个?本地日期?日期时间?
日期可以通过单个语句进行比较,因此为什么您需要特殊功能。
当dateTime
是DateTime()
的对象时
if((dateTime.toLocalDate()).equals(new LocalDate()))
当date
是java.util.date
的对象时
if((new DateTime(date).toLocalDate()).equals(new LocalDate()))
哪个乔达时间课程更适合这个?本地日期?日期时间?
了解您需要知道什么是本地日期和日期时间。
LocalDate()
是一个不可变的 datetime 类,表示没有 时区。所以没有时间部分。
DateTime()
是不可修改日期时间的标准实现 .class。 它具有日期的所有属性,其中包括date
,time
和timezone
。
因此,如果您需要比较日期和时间,最好使用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();
}