Как я могу найти новую дату окончания месяца со временем Joda?

Скажите, что дата окончания месяца является датой через месяц, который является в прошлые невыходные и непраздничный день в том месяце. Как я могу найти новую дату окончания прошлого месяца со временем Joda? Например, ответ на сегодняшний день был бы пятница 28-го мая, потому что это было концом месяца Мэй, и май был новым месяцем для окончания.

6
задан Erick Robertson 30 January 2011 в 19:38
поделиться

2 ответа

В общем:

  • Найти текущий месяц
  • Вернуться назад в месяц
  • Начиная с последнего дня этого месяца:
    • Если это не выходные и не праздничные дни, это дата окончания
    • В противном случае вернитесь на день назад и повторите

Или, может быть, это:

  • Начать с сегодняшнего дня:
    • Если ни то, ни другое ...

Это не самый эффективный вариант, но дешево кэшировать значение после его вычисления, потому что оно будет действительным в течение целого месяца. Вы можете легко вычислить "все" даты окончания месяца и сохранить их в поисковой таблице. Вы определенно хотите вычислить, когда будет следующее, потому что именно тогда истекает текущее кэшированное значение.


Пример

Вот отрывок, который я быстро придумал:

import org.joda.time.*;

public class LastMonthEnd {
   static int count = 0;
   static boolean isWeekendOrHoliday(DateTime d) {
      return (count++ < 5);
   }
   public static void main(String[] args) {
      DateTime d = new DateTime().minusMonths(1).dayOfMonth().withMaximumValue();
      while (isWeekendOrHoliday(d)) {
         d = d.minusDays(1);
      }
      System.out.println(d);
   }
}

Сегодня ( 2010-06-14 12: 04: 57Z ), это печатает "2010-05-26T12: 00 : 42.702Z ". Обратите внимание, что isWeekendOrHoliday - это просто заглушка для фактической реализации. Я полагаю, что настоящий тест будет довольно сложным (праздничная часть), и, возможно, стоит задать вопрос сам по себе.

3
ответ дан 16 December 2019 в 21:34
поделиться

DateTime.dayOfMonth.getMaximumValue () возвращает последний день месяца. Найдите будний день этого дня, чтобы проверить, не приходится ли он на выходные.

5
ответ дан 16 December 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: