ajm
ajm

Reputation: 13203

How to get last month/year in java?

How do I find out the last month and its year in Java?

e.g. If today is Oct. 10 2012, the result should be Month = 9 and Year = 2012. If today is Jan. 10 2013, the result should be Month = 12 and Year = 2012.

Upvotes: 51

Views: 150782

Answers (10)

Kamil007
Kamil007

Reputation: 21

You get by using the LocalDate class.

For Example:

  1. To get last month date:

    LocalDate.now().minusMonths(1);

  2. To get starting date of last month

    LocalDate.now().minusMonths(1).with(TemporalAdjusters.firstDayOfMonth());

Similarly for Year:

  1. To get last year date:

    LocalDate.now().minusYears(1);

  2. To get starting date of last year :

    LocalDate.now().minusYears(1).with(TemporalAdjusters.lastDayOfYear());

Upvotes: 0

Prashant Shubham
Prashant Shubham

Reputation: 516

YearMonth class

You can use the java.time.YearMonth class, and its minusMonths method.

YearMonth lastMonth = YearMonth.now().minusMonths(1);

Calling toString gives you output in standard ISO 8601 format: yyyy-mm

You can access the parts, the year and the month. You may choose to use the Month enum object, or a mere int value 1-12 for the month.

int year = lastMonth.getYear() ;
int month = lastMonth.getMonthValue() ;
Month monthEnum = lastMonth.getMonth() ;

Upvotes: 7

Anzz
Anzz

Reputation: 9

Here's the code snippet.I think it works.

      Calendar cal = Calendar.getInstance();
      SimpleDateFormat simpleMonth=new SimpleDateFormat("MMMM YYYY");
      cal.add(Calendar.MONTH, -1);
      System.out.println(simpleMonth.format(prevcal.getTime()));

Upvotes: -3

prasad kamble
prasad kamble

Reputation: 81

private static String getPreviousMonthDate(Date date){
    final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.set(Calendar.DAY_OF_MONTH, 1);  
    cal.add(Calendar.DATE, -1);

    Date preMonthDate = cal.getTime();  
    return format.format(preMonthDate);
}


private static String getPreToPreMonthDate(Date date){
    final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");

    Calendar cal = Calendar.getInstance();  
    cal.setTime(date);  
    cal.add(Calendar.MONTH, -1);  
    cal.set(Calendar.DAY_OF_MONTH,1);  
    cal.add(Calendar.DATE, -1);  

    Date preToPreMonthDate = cal.getTime();  
    return format.format(preToPreMonthDate);
}

Upvotes: 5

Przemek Piotrowski
Przemek Piotrowski

Reputation: 7456

java.time

Using java.time framework built into Java 8:

import java.time.LocalDate;

LocalDate now = LocalDate.now(); // 2015-11-24
LocalDate earlier = now.minusMonths(1); // 2015-10-24

earlier.getMonth(); // java.time.Month = OCTOBER
earlier.getMonth.getValue(); // 10
earlier.getYear(); // 2015

Upvotes: 37

George
George

Reputation: 497

The simplest & least error prone approach is... Use Calendar's roll() method. Like this:

    c.roll(Calendar.MONTH, false);

the roll method takes a boolean, which basically means roll the month up(true) or down(false)?

Upvotes: 7

RNJ
RNJ

Reputation: 15552

You need to be aware that month is zero based so when you do the getMonth you will need to add 1. In the example below we have to add 1 to Januaray as 1 and not 0

    Calendar c = Calendar.getInstance();
    c.set(2011, 2, 1);
    c.add(Calendar.MONTH, -1);
    int month = c.get(Calendar.MONTH) + 1;
    assertEquals(1, month);

Upvotes: 1

Gaim
Gaim

Reputation: 6844

Your solution is here but instead of addition you need to use subtraction

c.add(Calendar.MONTH, -1);

Then you can call getter on the Calendar to acquire proper fields

int month = c.get(Calendar.MONTH) + 1; // beware of month indexing from zero
int year  = c.get(Calendar.YEAR);

Upvotes: 77

MaVRoSCy
MaVRoSCy

Reputation: 17839

you can use the Calendar class to do so:

SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
System.out.println(format.format(cal.getTime()));

This prints : 2012.09.10 11:01 for actual date 2012.10.10 11:01

Upvotes: 10

Subhrajyoti Majumder
Subhrajyoti Majumder

Reputation: 41200

Use Joda Time Library. It is very easy to handle date, time, calender and locale with it and it will be integrated to java in version 8.

DateTime#minusMonths method would help you get previous month.

DateTime month = new DateTime().minusMonths (1); 

Upvotes: 12

Related Questions