Разница в днях между двумя датами Java? - PullRequest
4 голосов
/ 25 июля 2010

Я хочу получить разницу между двумя объектами 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

Вот, почему «22.06.2010» принимает 22 января? Кто-нибудь сталкивается с подобной проблемой?

Помоги мне, друзья .. Спасибо заранее ..

Ответы [ 5 ]

19 голосов
/ 25 июля 2010

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

12 голосов
/ 25 июля 2010

Месяц - это ММ

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

Формат форматирования DateFormat = новый SimpleDateFormat (" ММ / dd / гггг");

4 голосов
/ 25 июля 2010

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

3 голосов
/ 25 июля 2010

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

2 голосов
/ 17 августа 2014

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

LocalDate

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

Часовой пояс

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

Joda-Time Can Parse

Кроме того, пусть Joda-Time выполняет анализ.Нет необходимости использовать java.util.Date & .Calendar вообще.Символы форматирования Joda-time почти такие же, как 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 ) );
...