2013-04-16 4 views
1

Я разрабатываю приложение в JAVA swing, поскольку мне нужна разница в дате с текущей даты, например, если сегодня 16/04/2013, тогда он должен вернуть 15/04/2013. Я пробовал следующий код:Разница даты с текущей даты в java

Calendar cal = new GregorianCalendar(); 
Calendar cal2 = new GregorianCalendar(); 
cal.roll(Calendar.DAY_OF_YEAR, -1); 
//if within the first 30 days, need to roll the year as well 
if(cal.after(cal2)){ 
    cal.roll(Calendar.YEAR, -1); 
} 
System.out.println("Year " + cal.get(Calendar.YEAR)); 
System.out.println("Month " + cal.get(Calendar.MONTH)); 
System.out.println("Day " + cal.get(Calendar.DAY_OF_MONTH)); 

В этом коде я ожидал получить один день назад. Но вместо этого я получаю один месяц назад. Пример. если сегодня 16/04/2013, ожидаемый результат равен 15/04/2013, но я получаю 15/03/2013 (один месяц назад) в качестве выхода.

+2

вы Обязаны ли использовать календарь или было бы приемлемо использовать JodaTime? – fvu

+3

try' cal.add (Calendar.DAY_OF_MONTH, -1); ' – PermGenError

+1

Об этом отвечен раньше: http://stackoverflow.com/questions/3299972/difference-in-days-between-two-dates-in-java – user1697575

ответ

5

Вам не нужны какие-либо ручные манипуляции, календарь будет делать все необходимые даты арифметика автоматически, просто сделать это

Calendar cal = new GregorianCalendar(); 
    cal.add(Calendar.DATE, -1); 

Обратите внимание, что месяцы в начале календаря от 0 так апреля на 3

+0

'Календарь cal = new GregorianCalendar(); cal.add (Calendar.DATE, -1); System.out.println («Year» + cal.get (Calendar.YEAR)); System.out.println («Месяц» + cal.get (Calendar.MONTH)); System.out.println («День» + cal.get (Calendar.DAY_OF_MONTH)); 'это то, что вывод im получает ' Год 2013 Месяц 3 День 15' –

+0

Я добавил вывод в свой тест, это 15 апреля 2013 –

+0

Ах, у вас, 3 апреля, месяц начинается с 0 в Календаре –

2

Это классический пример почему java.util.Date реализация отстой: Месяцы нумерация начинается в нуле:

0-> January 
1-> February 
2-> March 
3-> April. 

Что вы имеете в виду:

new Date(10,1,2013) //10th of January of 2013 

Что вы получите: 10 февраля 3983 (1970 + 2013)

Смежные вопросы