Разница в днях между двумя датами Java?

Я хочу получить разницу между двумя объектами Java Date. Я использовал библиотеку Joda-Time. Но проблема в том, что я получаю Дни больше, чем разница фактических дней.

Вот мой фрагмент кода:

DateFormat formatter = new SimpleDateFormat("mm/dd/yyyy");

Date someDate=new Date();
Date today = Calendar.getInstance().getTime();

try     {
    someDate = formatter.parse("06/22/2010");
}
catch(ParseException pe)    {
    System.out.println("Parser Exception");
}

int days = Days.daysBetween(new DateTime(someDate), new DateTime(today)).getDays();

System.out.println(" Days Between " + someDate + " : " + today + " - " + days);

Здесь мой вывод:

 Days Between Fri Jan 22 00:06:00 IST 2010 : Sun Jul 25 19:27:01 IST 2010 - 184

Здесь, почему это занимает "06/22/2010", как 22 января? Кто-нибудь сталкивается с подобной проблемой?

Помогите мне, друзья.. Thanx заранее..

Ответ 1

Месяц MM

В вашем случае:

DateFormat formatter = new SimpleDateFormat ( " ММ/дд/гггг" );

Ответ 2

Кажется, что mm относится к минутам, а не месяцам, которые mm. Пожалуйста, проверьте здесь, чтобы просмотреть список соответствующих надписей:)

Ответ 3

Ваш шаблон немного неисправен. mm анализируется как минуты в час, вы ищете mm, который является месяцем года.

Ответ 4

mm = > минуты, а не месяцы - вам нужны ММ в течение нескольких месяцев - это решит вашу проблему Яна!

Ответ 5

Другие ответы правильно решили вашу конкретную проблему.

LocalDate

Но есть большее решение. Если вы начинаете только с дат, без времени и без часовых поясов, то вы должны использовать класс LocalDate, а не DateTime.

Часовой пояс

В вашем коде игнорируется ключевая проблема часовых поясов. Часовые пояса имеют значение даже для LocalDate, когда пытаются определить "сегодня". Вы хотите, чтобы сегодняшний день был в Монреале или в Париже. В Париже наступил новый день. Когда вы опускаете часовой пояс, вы получаете текущий часовой пояс JVMs.

Joda-Time Can Parse

Кроме того, пусть Joda-Time выполняет разбор. Не нужно вообще использовать java.util.Date и .Calendar. Форматы форматирования Joda-времени почти такие же, как java.util.Date, но не совсем так, чтобы справляться с документом. В этом случае он идентичен.

DateTimeFormatter formatter = DateTimeFormat.forPattern( "MM/dd/yyyy" );
LocalDate past = formatter.parseLocalDate( "06/22/2010" );
DateTimeZone = DateTimeZone.forID( "America/Montreal" ): // match time zone intended for that input string.
int days = Days.daysBetween( past, LocalDate.now( timeZone ) );