2010-07-25 12 views
4

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

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

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 заранее ..

ответ

12

месяц MM

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

DateFormat форматировочной = новый SimpleDateFormat (»MM/дд/гггг «);

3

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

4

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

19

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

+0

пожалуйста обновите ссылку –

+0

@ShahzadImam: Ссылка теперь указывает на новой версии JavaDocs. – npinti

+0

Спасибо. Решена проблема ..... мм –

2

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

LocalDate

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

Time Zone

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

Joda время Может Разбирает

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