How to get last Day, Week, Month, and Year in Java

Sharing is caring!

The java.util package provides the Calender class, which has many methods to compute the last day, week, month, and year. Let’s dive into it.

Import the following package to work with the Calendar class in Java,

import java.util.Calendar;

Create a calendar object as follow.

Calendar calendar = Calendar.getInstance();

The static method getInstance() returns a Calendar object whose calendar fields have been initialized with the current date and time. A created object can produce all the calendar field values needed to implement the date-time formatting for a particular language and calendar style.

Now, to get the last day(i.e. yesterday) we can do the following.

Calendar dayCalendar = Calendar.getInstance();
dayCalendar.set(Calendar.HOUR_OF_DAY, 0);
dayCalendar.set(Calendar.MINUTE, 0);
dayCalendar.set(Calendar.SECOND, 0);
dayCalendar.set(Calendar.MILLISECOND, 0);
dayCalendar.add(Calendar.DAY_OF_MONTH, -1);

Date yesterday = dayCalendar.getTime();

Setting Calendar.HOUR_OF_DAY, Calender.MINUTE, Calender.SECOND, Calender.MILLISECOND to 0 will set the time to 12 AM which is the start of the day.

The abstract method of Calendar add() is used to add or subtract the specified amount of time to the given calendar field, based on the calendar’s rules. For example, to subtract 3 days from the current time of the calendar, we can achieve it by calling: add(Calendar.DAY_OF_MONTH, -3).

getTime() the method returns a Date object representing this Calendar’s time value.

Now, to get the last week we can do the following.

Calendar weekCalendar = Calendar.getInstance();
weekCalendar.set(Calendar.HOUR_OF_DAY, 0);
weekCalendar.set(Calendar.MINUTE, 0);
weekCalendar.set(Calendar.SECOND, 0);
weekCalendar.set(Calendar.MILLISECOND, 0);
weekCalendar.add(Calendar.DAY_OF_WEEK, -(weekCalendar.get(Calendar.DAY_OF_WEEK) + 6));

Date lastWeek = weekCalendar.getTime();

Now, to get the last month we can do the following.

Calendar monthCalendar = Calendar.getInstance();
monthCalendar.set(Calendar.HOUR_OF_DAY, 0);
monthCalendar.set(Calendar.MINUTE, 0);
monthCalendar.set(Calendar.SECOND, 0);
monthCalendar.set(Calendar.MILLISECOND, 0);
monthCalendar.add(Calendar.DAY_OF_MONTH, -(monthCalendar.get(Calendar.DAY_OF_MONTH) + 30));

Date lastMonth = monthCalendar.getTime();

Now, to get the last year we can do the following.

Calendar yearCalendar = Calendar.getInstance();
yearCalendar.set(Calendar.HOUR_OF_DAY, 0);
yearCalendar.set(Calendar.MINUTE, 0);
yearCalendar.set(Calendar.SECOND, 0);
yearCalendar.set(Calendar.MILLISECOND, 0);
yearCalendar.add(Calendar.DAY_OF_YEAR, -(yearCalendar.get(Calendar.DAY_OF_YEAR) + 364));

Date yearBefore = yearCalendar.getTime();

But, if you want to get a date exactly before 7 days, before 30 days, or before 365 days remove the value added along with get(Calender.XYZ).

For example:

weekCalendar.add(Calendar.DAY_OF_WEEK, -weekCalendar.get(Calendar.DAY_OF_WEEK));

Complete code:

package com.iamsajan.main;

import java.util.Calendar;
import java.util.Date;

public class Main {
  public static void main(String[] args) {
    // Yesterday
    Calendar dayCalendar = Calendar.getInstance();

    dayCalendar.set(Calendar.HOUR_OF_DAY, 0);
    dayCalendar.set(Calendar.MINUTE, 0);
    dayCalendar.set(Calendar.SECOND, 0);
    dayCalendar.set(Calendar.MILLISECOND, 0);

    dayCalendar.add(Calendar.DAY_OF_MONTH, -1);
    Date yesterday = dayCalendar.getTime();
    System.out.println("Yesterday: " + yesterday);

    // Last Week
    Calendar weekCalendar = Calendar.getInstance();

    weekCalendar.set(Calendar.HOUR_OF_DAY, 0);
    weekCalendar.set(Calendar.MINUTE, 0);
    weekCalendar.set(Calendar.SECOND, 0);
    weekCalendar.set(Calendar.MILLISECOND, 0);

    weekCalendar.add(Calendar.DAY_OF_WEEK, -(weekCalendar.get(Calendar.DAY_OF_WEEK) + 6));

    Date lastWeek = weekCalendar.getTime();
    System.out.println("Last Week: " + lastWeek);

    // Last Month
    Calendar monthCalendar = Calendar.getInstance();

    monthCalendar.set(Calendar.HOUR_OF_DAY, 0);
    monthCalendar.set(Calendar.MINUTE, 0);
    monthCalendar.set(Calendar.SECOND, 0);
    monthCalendar.set(Calendar.MILLISECOND, 0);

    monthCalendar.add(Calendar.DAY_OF_MONTH, -(monthCalendar.get(Calendar.DAY_OF_MONTH) + 30));

    Date lastMonth = monthCalendar.getTime();
    System.out.println("Last Month: " + lastMonth);

    // Last Year
    Calendar yearCalendar = Calendar.getInstance();

    yearCalendar.set(Calendar.HOUR_OF_DAY, 0);
    yearCalendar.set(Calendar.MINUTE, 0);
    yearCalendar.set(Calendar.SECOND, 0);
    yearCalendar.set(Calendar.MILLISECOND, 0);

    yearCalendar.add(Calendar.DAY_OF_YEAR, -(yearCalendar.get(Calendar.DAY_OF_YEAR) + 364));

    Date lastYear = yearCalendar.getTime();
    System.out.println("Last Year: " + lastYear);
  }
}

Also, read

Convert HTML input type datetime-local to Timestamp in Java.

Keywords: java get day of week, java calendar day of week, java get last day of month, java calendar get day of week, get day of week java.

Sharing is caring!

Leave a Reply