如何创建今天午夜和明天午夜的Java Date对象?java.util.CalendarJDK 8 - java.time.LocalTime 和 java.time.LocalDate城大时间

2022-08-31 05:58:25

在我的代码中,我需要找到今天发生的所有事情。因此,我需要与从今天上午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();

答案 1

java.util.Calendar

// today    
Calendar date = new GregorianCalendar();
// reset hour, minutes, seconds and millis
date.set(Calendar.HOUR_OF_DAY, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);

// next day
date.add(Calendar.DAY_OF_MONTH, 1);

JDK 8 - java.time.LocalTime 和 java.time.LocalDate

LocalTime midnight = LocalTime.MIDNIGHT;
LocalDate today = LocalDate.now(ZoneId.of("Europe/Berlin"));
LocalDateTime todayMidnight = LocalDateTime.of(today, midnight);
LocalDateTime tomorrowMidnight = todayMidnight.plusDays(1);

城大时间

如果您使用的是JDK < 8,我推荐Joda Time,因为API非常好:

DateTime date = new DateTime().toDateMidnight().toDateTime();
DateTime tomorrow = date.plusDays(1);

由于Joda Time的2.3版本已被弃用,因此请使用以下内容:DateMidnight

DateTime today = new DateTime().withTimeAtStartOfDay();
DateTime tomorrow = today.plusDays(1).withTimeAtStartOfDay();

如果您不需要 JVM 的当前默认时区,请传递时区。

DateTimeZone timeZone = DateTimeZone.forID("America/Montreal");
DateTime today = new DateTime(timeZone).withTimeAtStartOfDay(); // Pass time zone to constructor.

答案 2

为了完整起见,如果您使用的是Java 8,则还可以使用该类的方法在UTC中获取午夜。truncatedToInstant

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

如 Javadoc 中所述

例如,使用 MINUTES 单位截断将向下舍入到最接近的分钟,将秒和纳秒设置为零。

希望它有帮助。