Я хочу получить последний месяц Конечная дата, я получаю текущий месяц и возвращаю его на один и устанавливаю значение месяца. Но Calender.set (Calender.Month, lastMonth) не работает только для определенной даты.Calender.set() Не работает должным образом
public static String getLastMonthEndDate(Date nowDate, String dateFormat)
{
final String METHOD_NAME = "getLastMonthEndDate" ;
SimpleDateFormat formatedDate = new SimpleDateFormat(dateFormat);
Calendar calendar = new GregorianCalendar(2014, Calendar.OCTOBER, 31); // Hard coded as 2014, oct 31st for the sake of example.
//calendar.setTime(nowDate);
System.out.println(calendar.getTime());
if(calendar.get(Calendar.MONTH) == Calendar.JANUARY)
{
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1);
}
//System.out.println("calendar.get(Calendar.MONTH) -1 : " + (calendar.get(Calendar.MONTH) -1));
int lastMonth = (calendar.get(Calendar.MONTH) -1);
System.out.println("Last month : "+lastMonth);
calendar.set(Calendar.MONTH, lastMonth);
//System.out.println(calendar.getTime());
//System.out.println("(calendar.get(Calendar.MONTH) : " + calendar.get(Calendar.MONTH));
System.out.println("calendar.getActualMaximum(Calendar.DAY_OF_MONTH) : " + calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
System.out.println("calendar.getTime() : " + calendar.getTime());
return formatedDate.format(calendar.getTime());
}
public static void main(String[] args)
{
Date dCurrentDate = getCurrentDate();
String strLastMonthEndDateInYYYY = getLastMonthEndDate(dCurrentDate, "MM/dd/yyyy");
System.out.println("strLastMonthEndDateInYYYY : "+strLastMonthEndDateInYYYY);
}
Внизу вывод, который я получил
output :
Fri Oct 31 00:00:00 IST 2014
Last month : 8
calendar.getActualMaximum(Calendar.DAY_OF_MONTH) : 31
calendar.getTime() : Wed Oct 01 00:00:00 IST 2014
strLastMonthEndDateInYYYY : 10/01/2014
Я не знаю, что где ошибка. Пожалуйста помоги.
Возможно, вы должны смотреть на [это] (http://stackoverflow.com/questions/4931955/why-java-calendar-setint-year- int-month-int-date-not-return-correct-date) – ha9u63ar
@hagubear Не имеет значения, так как Calendar.OCTOBER - это всего лишь 9. Так как 0 представляет январь. – codeMan
Почему вы не используете Calendar.add (Calendar.Month, -1), чтобы вычесть месяц? Тогда вам не нужно делать арифметику года для себя. –