Ответ 1
Месяц MM
В вашем случае:
DateFormat formatter = new SimpleDateFormat ( " ММ/дд/гггг" );
Я хочу получить разницу между двумя объектами 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 заранее..
Месяц MM
В вашем случае:
DateFormat formatter = new SimpleDateFormat ( " ММ/дд/гггг" );
Кажется, что mm
относится к минутам, а не месяцам, которые mm
. Пожалуйста, проверьте здесь, чтобы просмотреть список соответствующих надписей:)
Ваш шаблон немного неисправен. mm
анализируется как минуты в час, вы ищете mm
, который является месяцем года.
mm = > минуты, а не месяцы - вам нужны ММ в течение нескольких месяцев - это решит вашу проблему Яна!
Другие ответы правильно решили вашу конкретную проблему.
LocalDate
Но есть большее решение. Если вы начинаете только с дат, без времени и без часовых поясов, то вы должны использовать класс LocalDate
, а не DateTime
.
В вашем коде игнорируется ключевая проблема часовых поясов. Часовые пояса имеют значение даже для LocalDate, когда пытаются определить "сегодня". Вы хотите, чтобы сегодняшний день был в Монреале или в Париже. В Париже наступил новый день. Когда вы опускаете часовой пояс, вы получаете текущий часовой пояс JVMs.
Кроме того, пусть 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 ) );