Java 比较日期是否早于24小时

Java 比较日期是否早于24小时,java,calendar,Java,Calendar,我试图比较java中的两个日历,以确定其中一个是否在24小时前>=24小时前。我不确定实现这一目标的最佳方法 //get todays date Date today = new Date(); Calendar currentDate = Calendar.getInstance(); currentDate.setTime(today); //get last updat

我试图比较java中的两个日历,以确定其中一个是否在24小时前>=24小时前。我不确定实现这一目标的最佳方法

            //get todays date
            Date today = new Date();
            Calendar currentDate = Calendar.getInstance();
            currentDate.setTime(today);

            //get last update date
            Date lastUpdate = profile.getDateLastUpdated().get(owner);
            Calendar lastUpdatedCalendar = Calendar.getInstance();
            lastUpdatedCalendar(lastUpdate);

            //compare that last hotted was < 24 hrs ago from today?
//获取今天的日期
今天日期=新日期();
Calendar currentDate=Calendar.getInstance();
currentDate.setTime(今天);
//获取上次更新日期
Date lastUpdate=profile.getDateLastUpdate().get(所有者);
Calendar lastUpdatedCalendar=Calendar.getInstance();
lastUpdatedCalendar(lastUpdate);
//比较一下,从今天开始的最后一次加热时间是24小时以前吗?
您可以使用以下示例:

public final static long MILLIS_PER_DAY = 24 * 60 * 60 * 1000L;
public static void main(String args[]) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date1 = sdf.parse("2009-12-31");
    Date date2 = sdf.parse("2010-01-31");

    boolean moreThanDay = Math.abs(date1.getTime() - date2.getTime()) > MILLIS_PER_DAY;

    System.out.println(moreThanDay);
}
tl;博士 细节 旧的日期时间类(java.util.date/.Calendar、java.text.simpleDataFormat等)已经被证明是令人困惑和有缺陷的。避开它们

对于Java 8及更高版本,请使用Java中内置的Java.time框架。对于早期的Java,将Joda时间框架添加到项目中

您可以轻松地在java.util.Date和任一框架之间进行转换

java.time 内置于Java8和更高版本中的框架取代了麻烦的旧Java.util.Date/.Calendar类。新类的灵感来源于一个非常成功的框架,该框架旨在作为其继承者,在概念上类似,但经过了重新设计。定义为。由项目扩展。看

Instant
类表示UTC时间轴上的一个时刻。如果你想要求24小时而不是“一天”,那么我们只需要
Instant

Instant then = yourJUDate.toInstant();
Instant now = Instant.now();
Instant twentyFourHoursEarlier = now.minus( 24 , ChronoUnit.HOURS );
// Is that moment (a) not before 24 hours ago, AND (b) before now (not in the future)?
Boolean within24Hours = ( ! then.isBefore( twentyFourHoursEarlier ) ) &&  then.isBefore( now ) ;
如果你的意思是“一天”而不是24个小时,那么我们需要考虑时区。一天是在一个时区内本地确定的。其他异常情况意味着一天并不总是24小时长

Instant then = yourJUDate.toInstant();
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now( zoneId );
ZonedDateTime oneDayAgo = now.minusDays( 1 );
Boolean within24Hours = ( ! then.isBefore( oneDayAgo ) ) &&  then.isBefore( now ) ;
另一种方法是使用ThreeTen额外项目中的
Interval
类。该类表示一对
即时
对象。该类提供了
contains
等方法来执行比较

乔达时间 该库的工作方式与java.time类似,这是它的灵感所在

DateTime dateTime = new DateTime( yourDate ); // Convert java.util.Date to Joda-Time DateTime.
DateTime yesterday = DateTime.now().minusDays(1);
boolean isBeforeYesterday = dateTime.isBefore( yesterday );
或者,在一行中:

boolean isBeforeYesterday = new DateTime( yourDate).isBefore( DateTime.now().minusDays(1) );

您可以检查localDateTime是否在24小时内,具体取决于区域偏移量参数,如下面的示例所示

@Test
public void checkIsWithin24Hours() {
    final ZoneOffset zoneOffset = ZoneOffset.UTC;
    
    final LocalDateTime now = LocalDateTime.now(zoneOffset);
    final LocalDateTime after = LocalDateTime.now(zoneOffset).plusHours(5);

    final long nowHours = TimeUnit.MILLISECONDS.toHours(now.toInstant(zoneOffset).toEpochMilli());
    final long afterFiveHours = TimeUnit.MILLISECONDS.toHours(after.toInstant(zoneOffset).toEpochMilli());
    
    assertThat(afterFiveHours - nowHours <= 24).isTrue();
}
@测试
24小时内公开作废检查(){
最终ZoneOffset ZoneOffset=ZoneOffset.UTC;
final LocalDateTime now=LocalDateTime.now(zoneOffset);
final LocalDateTime after=LocalDateTime.now(zoneOffset).plusHours(5);
final long nowHours=TimeUnit.millides.toHours(now.toInstant(zoneOffset.toEpochMilli());
final long aftervehours=TimeUnit.millides.toHours(after.toInstant(zoneOffset.toEpochMilli());

断言(五小时后-现在希望这可能会对您有所帮助,像和
java.text.SimpleDateFormat
这样非常麻烦的旧日期时间类现在被内置在java 8和更高版本中的类所取代。请参见.FYI,像和
java.text.SimpleDateFormat
这样非常麻烦的旧日期时间类现在被取代Java 8及更高版本中内置的类对其进行了修改。请参阅。
@Test
public void checkIsWithin24Hours() {
    final ZoneOffset zoneOffset = ZoneOffset.UTC;
    
    final LocalDateTime now = LocalDateTime.now(zoneOffset);
    final LocalDateTime after = LocalDateTime.now(zoneOffset).plusHours(5);

    final long nowHours = TimeUnit.MILLISECONDS.toHours(now.toInstant(zoneOffset).toEpochMilli());
    final long afterFiveHours = TimeUnit.MILLISECONDS.toHours(after.toInstant(zoneOffset).toEpochMilli());
    
    assertThat(afterFiveHours - nowHours <= 24).isTrue();
}