Проверьте, находится ли текущая дата в текущем месяце - PullRequest
0 голосов
/ 08 апреля 2020

Я знаю, что есть несколько похожих вопросов. Но у меня есть два отличия:

  1. Использование только java.util.* классов (наш сервер в настоящее время работает только с этими)
  2. Мне нужно определить, является ли данная дата после указанной даты ИЛИ представляет тот же день (обычно сегодня)

Вот что я получил:

if ((new Date().getMonth() == object.getDate().getMonth() && new Date().getYear() == object.getDate().getYear()
                                    && new Date().getDay() == object.getDate().getDay())
                                    || (new Date().after(object.getDate()) && new Date().getMonth() == object.getDate().getMonth()
                                            && new Date().getYear() == object.getDate().getYear()))

Эта штука работает, но давайте будем честными - выглядит не очень элегантно. Есть ли способ сделать это красивее?

1 Ответ

0 голосов
/ 08 апреля 2020

Если вы хотите использовать свое решение, в любом случае стоит его оптимизировать. Например, создать new Date() только один раз. Также, чтобы сделать его более читабельным и более коротким, извлеките object.getDate() в качестве переменной выше всех этих сравнений. Еще один способ решить вашу проблему может быть:

    public static void main(String[] args) {
        Calendar min = getMinDateOfMonth();
        Calendar max = getMinDateOfMonth();
        max.set(Calendar.MONTH, min.get(Calendar.MONTH) + 1);
        if (min.getTime().before(object.getDate()) && max.getTime().after(object.getDate())) {
            // you're inside the month
        }
    }

    private static Calendar getMinDateOfMonth() {
        Calendar min = Calendar.getInstance();
        min.set(Calendar.DAY_OF_MONTH, 1);
        min.set(Calendar.HOUR, 0);
        min.set(Calendar.MINUTE, 0);
        min.set(Calendar.SECOND, 0);
        min.set(Calendar.MILLISECOND, 0);
        return min;
    }
...