Working with Date and Time API
1. Using LocalDate
Example: LocalDate
LocalDate today = LocalDate.now();
LocalDate ymd = LocalDate.of(2026, 5, 12);
LocalDate parsed = LocalDate.parse("2026-05-12");
LocalDate plus = today.plusDays(7).plusMonths(1);
| Method | Detail |
|---|---|
now() / of(y,m,d) / parse(s) | Factories |
plus/minus(amount, unit) | Arithmetic |
getYear/getMonth/getDayOfMonth | Extract |
isBefore/isAfter/isEqual | Comparison |
2. Using LocalTime
| Method | Detail |
|---|---|
LocalTime.of(14, 30, 0) | HH, MM, SS |
plusHours/Minutes/Seconds/Nanos | Arithmetic |
truncatedTo(MINUTES) | Reset smaller fields |
3. Using LocalDateTime
| Method | Detail |
|---|---|
now() / of(...) / parse(s) | Factories |
toLocalDate() / toLocalTime() | Extract parts |
atZone(zone) | Convert to ZonedDateTime |
4. Using ZonedDateTime
Example: ZonedDateTime
ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
ZonedDateTime ny = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));
| Method | Use |
|---|---|
withZoneSameInstant(z) | Same moment, different zone |
withZoneSameLocal(z) | Same wall-clock, different zone |
toInstant() | UTC instant |
5. Using Instant
| Method | Detail |
|---|---|
Instant.now() | UTC current |
Instant.ofEpochSecond(s) | Seconds since 1970-01-01T00:00Z |
toEpochMilli() | Milliseconds |
6. Using Duration
| Method | Detail |
|---|---|
Duration.ofMinutes(5) | Time-based |
Duration.between(t1, t2) | Compute |
toMillis/toSeconds/toMinutes/toHours | Convert |
plus / minus / multipliedBy | Arithmetic |
7. Using Period
| Method | Detail |
|---|---|
Period.of(1, 6, 0) | 1 yr 6 mo 0 days |
Period.between(d1, d2) | Date difference |
getYears/getMonths/getDays | Components |
8. Formatting Dates
Example: Format/parse
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
String s = LocalDateTime.now().format(fmt);
LocalDateTime back = LocalDateTime.parse(s, fmt);
| Pattern | Meaning |
|---|---|
yyyy | Year |
MM / MMM / MMMM | Numeric / Short / Full |
dd | Day of month |
HH / hh | 24h / 12h |
mm / ss | Minutes / Seconds |
SSS | Millis |
z / Z / X | Zone |
9. Parsing Dates
| Method | Use |
|---|---|
LocalDate.parse(s) | ISO format default |
LocalDate.parse(s, fmt) | Custom formatter |
| Standard formatters | DateTimeFormatter.ISO_DATE/ISO_DATE_TIME/RFC_1123_DATE_TIME |
10. Manipulating Dates
| Method | Detail |
|---|---|
plusX/minusX | Add/subtract |
withYear/Month/DayOfMonth(n) | Replace component |
with(TemporalAdjusters.firstDayOfMonth()) | Predefined adjusters |
11. Comparing Dates
| Method | Returns |
|---|---|
isBefore(b) / isAfter(b) / isEqual(b) | boolean |
compareTo(b) | int |
equals(b) | Considers chronology + zone |
12. Working with Time Zones
| Class | Detail |
|---|---|
ZoneId | Region ID (e.g., Asia/Tokyo) |
ZoneOffset | Fixed offset from UTC |
ZoneId.systemDefault() | JVM default |
ZoneId.getAvailableZoneIds() | All zones |
13. Understanding Clock Class
| Method | Use |
|---|---|
Clock.systemUTC() / systemDefaultZone() | Real clocks |
Clock.fixed(instant, zone) | Testing |
LocalDate.now(clock) | Pass clock for test isolation |