2012-03-03 2 views
4

Я хотел получить количество недель и месяцев между двумя диапазонами дат в Java. . Для бывших, Дата начала: 03.01.2012 Дата окончания : 03/05/2012Неделя между двумя датами Java + Joda Time

Поскольку две даты приходятся на две разные недели я хочу, чтобы результат 2 вместо 0.

Вторая часть проблемы: Дата начала: 02/29/2012 Дата окончания: 03/01/2012

Количество месяцев между должно быть 2.

Я искал в Интернете об этом и многие люди рекомендовали использовать время Joda Date в Java. Поэтому я дал ему шанс. Мне удалось за неделю работать, но я не уверен, что это правильный путь. Вот то, что я делаю, чтобы получить продолжительность недели:

DateTime s = new DateTime(Long.parseLong("1330573027000")); // 2012-02-29 
    DateTime e = new DateTime(Long.parseLong("1331005027000")); // 2012-03-05 

    Weeks weeks = Weeks.weeksBetween(s, e).plus(1); 

Это возвращает 1, когда я ожидаю 2 с момента два даты в разных неделях.

В течение нескольких месяцев я старался следовать за ним, но он возвращает 0, но я хочу, чтобы он вернулся 2, поскольку две даты находятся в двух разных месяцах.

Может ли кто-нибудь указать мне в правильном направлении?

Спасибо!

Edit: Я думаю, что есть один способ сделать это, пожалуйста, дайте мне знать, если она выглядит:

DateTime start = new DateTime(Long.parseLong("1330659427000")); 
    DateTime start = new DateTime(Long.parseLong("1331005027000")); 

    DateTime finalStart = start.dayOfWeek().withMinimumValue(); 
    DateTime finalEnd = end.dayOfWeek().withMaximumValue(); 

А затем получить разницу между finalStart и finalEnd. Это выглядит правильно?

Edit2 Обновил время окончания

+0

две разные недели? что, если даты говорят, «2012-02-29» и «2012-12-29», удовлетворяет две разные недели? вы смотрите на ответ = 2, также выше? – Narayan

+0

Нет, в приведенном вами сценарии должно учитываться количество недель между двумя диапазонами дат. Таким образом, я хочу, чтобы это длилось между первым днем ​​недели начальной даты и последним днем ​​недели конечной даты. Таким образом, я получу 2, а не продолжительность только между двумя датами. – test123

+0

в вашем примере, недели не в две разные недели, '2012-02-29' и' 2012-03-01' принадлежат к той же неделе! ваше требование не ясно! – Narayan

ответ

0
int OFFSET_ONE = 1; 

    DateTime t1 = new DateTime().withDate(2012, 02, 29).withDayOfWeek(1); 
    DateTime t2 = new DateTime().withDate(2012, 03, 05).withDayOfWeek(7); 

    int week1 = t2.weekOfWeekyear().get(); 
    int week2 = t1.weekOfWeekyear().get(); 

    System.out.println(week1-week2+OFFSET_ONE); // add OFFSET_ONE 

это даст, что вы после?

+1

Я думаю, что он делает, но как он отличается от того, что я делал, а именно: 'DateTime s = new DateTime (Long.parseLong (" 1330659427000 "));' 'DateTime e = new DateTime (Long.parseLong (Long.parseLong (Long.parseLong) "1330832227000")); '' \t DateTime фс = s.dayOfWeek() withMinimumValue();. '' DateTime Fe = e.dayOfWeek() withMaximumValue();. '' недели недели = Weeks.weeksBetween (фс , fe) .plus (1); ' – test123

+0

выглядит ОК! но это очень странное требование! это все, что я могу сказать! – Narayan

6

JodaTime Weeks.weeksBetween (s, e) возвращает только целую неделю. Неполные недели не учитываются. Чтобы решить эту проблему, вы должны гарантировать, что дни будут в начале и в конце недели. Попробуйте это:

int weeks = Weeks.weeksBetween(s.dayOfWeek().withMinimumValue().minusDays(1), 
      e.dayOfWeek().withMaximumValue().plusDays(1)).getWeeks(); 

В minusDays/plusDays будет что гарантирует недели я пытаюсь посчитать полные.

же логика применяется в течение нескольких месяцев:

int months = Months.monthsBetween(s.dayOfMonth().withMinimumValue().minusDays(1), 
      e.dayOfMonth().withMaximumValue().plusDays(1)).getMonths(); 
Смежные вопросы