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);Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
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.
