1. ホーム

[解決済み】今日の午前0時と明日の午前0時のJava日付オブジェクトを作成する方法は?

2022-05-10 08:51:49

質問

私のコードでは、今日起こったすべての事柄を見つける必要があります。そこで、今日の午前0時00分(早朝0時)から午後12時00分(今夜0時)までの日付に対して比較する必要があります。

そう

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();

解決方法は?

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を使用している場合は、以下をお勧めします。 ヨーダ時間 というのも、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.