Date / Time
Date / Time: LocalDate と LocalDateTime は時刻情報の有無が違う
LocalDate は日付だけ、LocalDateTime は日付と時刻を持ち、変換時に失われる・補われる情報があります。
SourceDateParts.java
Java 21
package examples.datetime;
import java.time.LocalDate;
import java.time.LocalDateTime;
public final class DateParts {
private DateParts() {}
public static LocalDate dateOf(LocalDateTime dateTime) {
return dateTime.toLocalDate();
}
public static LocalDateTime startOfDay(LocalDate date) {
return date.atStartOfDay();
}
}TestDatePartsTest.java
Java 21
package examples.datetime;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.time.LocalDate;
import java.time.LocalDateTime;
import org.junit.jupiter.api.Test;
class DatePartsTest {
@Test
void LocalDateTimeから取り出したLocalDateには時刻が含まれない() {
assertEquals(LocalDate.of(2026, 8, 27), DateParts.dateOf(LocalDateTime.of(2026, 8, 27, 9, 30)));
}
@Test
void LocalDateから作るLocalDateTimeはその日の開始時刻になる() {
assertEquals(
LocalDateTime.of(2026, 8, 27, 0, 0), DateParts.startOfDay(LocalDate.of(2026, 8, 27)));
}
}01Assertion
このテストで確認できること
- LocalDateTime を LocalDate にすると時刻情報は残らない
- LocalDate.atStartOfDay は 00:00 の LocalDateTime を作る
日付だけで十分な業務ルールに LocalDateTime を使うと、意図しない時刻比較を持ち込みます。必要な粒度の型を選びます。
OBSERVED RESULT
expected: dateOf(09:30) → 2026-08-27
actual: 2026-08-27
startOfDay → 00:00