Master Java Date & Time APIs: Quick Reference for Daily, Weekly, Monthly and Quarterly Operations
This article consolidates essential Java date and time utilities—including start/end calculations for days, weeks, months, quarters and years, time arithmetic, formatting, parsing, and conversions between LocalDateTime, Date, and Instant—providing a handy reference for developers working with the Java Time API.
In daily development many utility classes contain similar date and time APIs; this article gathers them for quick reference.
1.1 Start and End of Day/Week/Month/Year
LocalDateTime now = LocalDateTime.now();
LocalDateTime startOfDay = now.toLocalDate().atStartOfDay(); // 00:00:00
LocalDateTime endOfDay = now.toLocalDate().atTime(LocalTime.MAX); // 23:59:59.999
LocalDateTime startOfWeek = now.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).toLocalDate().atStartOfDay();
LocalDateTime endOfWeek = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)).toLocalDate().atTime(LocalTime.MAX);
LocalDateTime startOfMonth = now.withDayOfMonth(1).toLocalDate().atStartOfDay();
LocalDateTime endOfMonth = now.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate().atTime(LocalTime.MAX);
LocalDateTime startOfYear = now.withDayOfYear(1).toLocalDate().atStartOfDay();
LocalDateTime endOfYear = now.with(TemporalAdjusters.lastDayOfYear()).toLocalDate().atTime(LocalTime.MAX);
return new LocalDateTime[] {startOfDay, endOfDay, startOfWeek, endOfWeek, startOfMonth, endOfMonth, startOfYear, endOfYear};1.2 Start and End of Quarter
First quarter (Q1): Jan 1 – Mar 31
Second quarter (Q2): Apr 1 – Jun 30
Third quarter (Q3): Jul 1 – Sep 30
Fourth quarter (Q4): Oct 1 – Dec 31
public static LocalDateTime[] getQuarterRange(LocalDateTime date) {
int month = date.getMonthValue();
LocalDateTime startOfQuarter;
LocalDateTime endOfQuarter;
if (month >= 1 && month <= 3) { // Q1
startOfQuarter = LocalDateTime.of(date.getYear(), Month.JANUARY, 1, 0, 0, 0);
endOfQuarter = LocalDateTime.of(date.getYear(), Month.MARCH, 31, 23, 59, 59, 999999999);
} else if (month >= 4 && month <= 6) { // Q2
startOfQuarter = LocalDateTime.of(date.getYear(), Month.APRIL, 1, 0, 0, 0);
endOfQuarter = LocalDateTime.of(date.getYear(), Month.JUNE, 30, 23, 59, 59, 999999999);
} else if (month >= 7 && month <= 9) { // Q3
startOfQuarter = LocalDateTime.of(date.getYear(), Month.JULY, 1, 0, 0, 0);
endOfQuarter = LocalDateTime.of(date.getYear(), Month.SEPTEMBER, 30, 23, 59, 59, 999999999);
} else { // Q4
startOfQuarter = LocalDateTime.of(date.getYear(), Month.OCTOBER, 1, 0, 0, 0);
endOfQuarter = LocalDateTime.of(date.getYear(), Month.DECEMBER, 31, 23, 59, 59, 999999999);
}
return new LocalDateTime[] {startOfQuarter, endOfQuarter};
}1.3 Current Year/Month/Day/Hour/Minute
LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue(); // 1-12
int dayOfMonth = now.getDayOfMonth(); // 1-31
int hour = now.getHour(); // 0-23
int minute = now.getMinute(); // 0-591.4 Add/Subtract Time
LocalDateTime now = LocalDateTime.now();
LocalDateTime addedTime = now.plusYears(1) // +1 year
.plusMonths(2) // +2 months
.plusDays(3) // +3 days
.plusHours(4) // +4 hours
.plusMinutes(5) // +5 minutes
.plusSeconds(6); // +6 seconds
LocalDateTime subtractedTime = now.minusYears(1) // -1 year
.minusMonths(2) // -2 months
.minusDays(3) // -3 days
.minusHours(4) // -4 hours
.minusMinutes(5) // -5 minutes
.minusSeconds(6); // -6 seconds1.5 Formatting and Parsing
LocalDateTime now = LocalDateTime.now();
String isoString = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分");
String customString = now.format(customFormatter);
String dateString = "2025年01月10日 14时30分";
DateTimeFormatter customFormatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分");
LocalDateTime parsedDate = LocalDateTime.parse(dateString, customFormatter2);Common DateTimeFormatter patterns: yyyy – four‑digit year (e.g., 2025) MM – two‑digit month (01‑12) dd – two‑digit day (01‑31) HH – hour in 24‑hour format (00‑23) mm – minute (00‑59) ss – second (00‑59) E – day‑of‑week abbreviation (Mon, Tue, …) a – AM/PM marker MMM – month abbreviation (Jan) yyyy-MM-dd – common date format (2025-01-10) yyyy-MM-dd HH:mm:ss – common datetime format (2025-01-10 14:30:00)
2. Date API
2.1 Start and End of Day/Week/Month/Year (using java.util.Date and Calendar )
Date now = new Date(); // current time
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
// Start of day
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date dayStart = calendar.getTime();
// End of day
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date dayEnd = calendar.getTime();
// Start of week (Sunday as first day)
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Date weekStart = calendar.getTime();
// End of week (Saturday)
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date weekEnd = calendar.getTime();
// Start of month
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date monthStart = calendar.getTime();
// End of month
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date monthEnd = calendar.getTime();
// Start of year
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date yearStart = calendar.getTime();
// End of year
calendar.set(Calendar.MONTH, Calendar.DECEMBER);
calendar.set(Calendar.DAY_OF_MONTH, 31);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Date yearEnd = calendar.getTime();2.2 Current Year/Month/Day/Hour/Minute
Date now = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; // Calendar.MONTH is zero‑based
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
// values are stored in the variables above2.3 Add/Subtract Time with Calendar
Date now = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
// Add 1 year
calendar.add(Calendar.YEAR, 1);
Date plusOneYear = calendar.getTime();
// Subtract 2 years
calendar.add(Calendar.YEAR, -2);
Date minusOneYear = calendar.getTime();
// Add 1 month
calendar.add(Calendar.MONTH, 1);
Date plusOneMonth = calendar.getTime();
// Subtract 2 months
calendar.add(Calendar.MONTH, -2);
Date minusOneMonth = calendar.getTime();
// Add 1 day
calendar.add(Calendar.DAY_OF_MONTH, 1);
Date plusOneDay = calendar.getTime();
// Subtract 2 days
calendar.add(Calendar.DAY_OF_MONTH, -2);
Date minusOneDay = calendar.getTime();2.4 Formatting and Parsing with SimpleDateFormat
Date now = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(now);
System.out.println("Formatted Date: " + formattedDate);
String dateStr = "2025-01-10 14:30:00";
Date parsedDate = formatter.parse(dateStr);
// parsedDate holds the Date representation of the string3. Converting between LocalDateTime and Date
Convert LocalDateTime to Date via Instant and a time zone:
LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zoneId = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zoneId).toInstant();
Date date = Date.from(instant);Convert Date to LocalDateTime via Instant and a time zone:
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();4. Duration – Calculating Time Intervals
// Using LocalDateTime to calculate a duration
LocalDateTime startTime = LocalDateTime.now();
LocalDateTime endTime = LocalDateTime.now();
Duration durationFromLocalDateTime = Duration.between(startTime, endTime);
System.out.println("Duration between startTime and endTime: " + durationFromLocalDateTime);
System.out.println("Seconds: " + durationFromLocalDateTime.getSeconds());
System.out.println("Nano: " + durationFromLocalDateTime.getNano());
// Creating Duration instances
Duration durationOfMinutes = Duration.ofMinutes(5); // 5 minutes
Duration durationOfDays = Duration.ofDays(1); // 1 day
// Adding and subtracting a Duration from a LocalDateTime
LocalDateTime now = LocalDateTime.now();
LocalDateTime futureTime = now.plus(durationOfDays);
LocalDateTime pastTime = now.minus(durationOfDays);Lin is Dream
Sharing Java developer knowledge, practical articles, and continuous insights into computer engineering.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
