在我的代码中,我需要找到今天发生的所有事情。因此,我需要将今天凌晨00:00(今天凌晨午夜)到中午12:00(今晚午夜)的日期进行比较。

我知道……

Date today = new Date(); 

... 我现在很生气。和…

Date beginning = new Date(0);

…1970年1月1日是零。但是有什么简单的方法可以让你今天和明天的时间都为零呢?


更新

我做到了,但肯定有更简单的方法吧?

Calendar calStart = new GregorianCalendar();
calStart.setTime(new Date());
calStart.set(Calendar.HOUR_OF_DAY, 0);
calStart.set(Calendar.MINUTE, 0);
calStart.set(Calendar.SECOND, 0);
calStart.set(Calendar.MILLISECOND, 0);
Date midnightYesterday = calStart.getTime();
            
Calendar calEnd = new GregorianCalendar();
calEnd.setTime(new Date());
calEnd.set(Calendar.DAY_OF_YEAR, calEnd.get(Calendar.DAY_OF_YEAR)+1);
calEnd.set(Calendar.HOUR_OF_DAY, 0);
calEnd.set(Calendar.MINUTE, 0);
calEnd.set(Calendar.SECOND, 0);
calEnd.set(Calendar.MILLISECOND, 0);
Date midnightTonight = calEnd.getTime();

当前回答

JDK8 - Java时间模块方式:

LocalDateTime todayMidnight = LocalDate.now().atStartOfDay();

也工作:

LocalDateTime todayMidnight = LocalDateTime.now().with(LocalTime.MIDNIGHT);

其他回答

因为一天是24 * 60 * 60 * 1000毫秒, 这一天的午夜可以计算为……

long now = System.currentTimeMillis();
long delta = now % 24 * 60 * 60 * 1000;
long midnight = now - delta;
Date midnightDate = new Date(midnight);`

我知道这是一个很老的帖子。我想在这里分享我的知识!

对于日期今天午夜与准确的时区,您可以使用以下

public static Date getCurrentDateWithMidnightTS(){

    return new Date(System.currentTimeMillis() - (System.currentTimeMillis()%(1000*60*60*24)) - (1000*60 * 330));
}

其中(1000*60 * 330)被减去,即实际上与时区有关,例如印度时区,即加尔各答与实际时差+5:30小时。减去换算成毫秒的时间。

所以根据你的需要改变最后一个减数。我正在创建一个产品,即只基于印度,所以只是使用特定的时间戳。

找到午夜最简单的方法:

Long time = new Date().getTime();
Date date = new Date(time - time % (24 * 60 * 60 * 1000));

第二天:

Date date = new Date(date.getTime() + 24 * 60 * 60 * 1000);

为了完整起见,如果您正在使用Java 8,您还可以使用Instant类的truncatedTo方法来获取UTC时间的午夜。

Instant.now().truncatedTo(ChronoUnit.DAYS);

用Javadoc编写

例如,使用MINUTES单位进行截断将四舍五入到最近的分钟,将秒和纳秒设置为零。

希望能有所帮助。

Date now= new Date();
// Today midnight
Date todayMidnight = new Date(endTime.getTime() -endTime.getTime()%DateUtils.MILLIS_PER_DAY);

// tomorrow midnight
Date tomorrowMidnight = new Date(endTime.getTime() -endTime.getTime()%DateUtils.MILLIS_PER_DAY + DateUtils.MILLIS_PER_DAY);