views:

78

answers:

4

I need to minus 365 days in a given date (givenDate)-

Calendar calendar = Calendar.getInstance();
calendar.setTime(givenDate);
calendar.add(Calendar.DATE, -365);  

Am I right?

A: 

Calendar.DAY_OF_YEAR is the proper way to subtract days

You can also subtract a year (taking in to account leap years) by using

Calendar calendar = Calendar.getInstance();
calendar.setTime(givenDate);
calendar.add(Calendar.YEAR, -1);
KevMo
Actually calendar.add(Calendar.DAY_OF_YEAR, n) and calendar.add(Calendar.DATE, n) are identical. See http://stackoverflow.com/questions/2506082/add-more-than-30-days-with-calendars-add-method-in-java/2506096#2506096
Juha Syrjälä
+1  A: 

I don't think it'll make a different, but I would use Calendar.DAY_OF_YEAR as the field.

Ben S
+3  A: 

That is the correct way to subtract days.

Note that 365 days does not always equal one year because of leap days. calendar.add(Calendar.YEAR, -1) would subtract one year correctly.

You also may want to use Joda Time-library instead of java.util.Date and java.util.Calendar. Joda Time is much nices API for handling times and dates.

Juha Syrjälä
A: 

If you are trying to strictly subtract 365 days, then yeah, that'd do it. However, if you are trying years backward, that might not work due to leap years.

luis.espinal