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.

Lin is Dream
Lin is Dream
Lin is Dream
Master Java Date & Time APIs: Quick Reference for Daily, Weekly, Monthly and Quarterly Operations

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-59

1.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 seconds

1.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 above

2.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 string

3. 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);
Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

JavadatetimeLocalDateTimedateDurationTime API
Lin is Dream
Written by

Lin is Dream

Sharing Java developer knowledge, practical articles, and continuous insights into computer engineering.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.