Расчет месяца как «между» периода в Java - PullRequest
3 голосов
/ 02 октября 2009

Я хочу выбрать записи, у которых есть дата создания между первым и последним днем ​​данного месяца. Я рассчитываю месяц с начала и конца следующим образом:

Дата "месяц" - это просто случайная дата внутри таймфрейма

Calendar cal = Calendar.getInstance();
cal.setTime(month);
int endday = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
int actualmonth = cal.get(Calendar.MONTH) + 1;
int year = cal.get(Calendar.YEAR);

Date begin = format.parse("01." + actualmonth + "." + year);
Date end = format.parse(endday + "." + actualmonth + "." + year);

Когда я думаю об этом, мне действительно нужно установить дневное время, чтобы не пропустить записи в последний день месяца.

Я чувствую, что это в некотором смысле неуместно, кто-нибудь ищет лучшее решение?

Ответы [ 3 ]

6 голосов
/ 02 октября 2009

Что я хотел бы сделать, это создать календарь и установить месяц и год на месяц, который вы хотите, день в 1, час, минуты и миллисекунды в ноль. Затем возьмите дату этого для вашего начального диапазона. Затем я прибавил бы месяц, а затем вычел бы миллисекунду. Возьмите дату этого для вашего конечного диапазона.

  Calendar dateCal = Calendar.getInstance();
  dateCal.set(Calendar.MONTH, month);
  dateCal.set(Calendar.YEAR, year);
  dateCal.set(Calendar.HOUR_OF_DAY, 0);
  dateCal.set(Calendar.MINUTE, 0);
  dateCal.set(Calendar.SECOND, 0);
  dateCal.set(Calendar.MILLISECOND, 0);
  Date startDate = dateCal.getTime();

  dateCal.add(Calendar.MONTH, 1)
  dateCal.add(Calendar.MILLISECOND, -1);
  Date endDate = dateCal.getTime();
3 голосов
/ 02 октября 2009

В классе Calendar доступны методы для получения первого и последнего дней месяца:

getActualMaximum(Calendar.DAY_OF_MONTH)
getActualMinimum(Calendar.DAY_OF_MONTH)
0 голосов
/ 02 октября 2009

хорошо, решил это по примеру Павла:

Calendar cal = Calendar.getInstance();
cal.setTime(month);
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.getActualMinimum(Calendar.DATE), 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
Date begin = cal.getTime();
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.MILLISECOND, -1);
Date end = cal.getTime();

спасибо всем

...