Работа с именами LocalDate и Months - PullRequest
1 голос
/ 05 мая 2019

У меня есть файл .txt, который я импортирую в свою Java-программу, например ("2012.12.01").Я получаю месяц (интересно, потому что я никогда не использую часть getDayOfMonth().name();, и даже при этом он записывает имена, а не цифры (JANUARY вместо 01 или 1). Поэтому я попытался определить,месяц февраль или нет. Но даже если это правда, if возвращает false. Возможно, это потому, что месяц никогда не равен String.

for (Changes c : list) {
                int Year = v.getDate().getYear();
                Month month= v.getDate().getMonth();
                int Day = v.getDate().getDayOfMonth();
                if (Year%4==0 && month.equals("FEBRUARY") && Day==24) 
                    leapDay = true;
            }

Ответы [ 2 ]

3 голосов
/ 05 мая 2019

Это должно быть

Month.FEBRUARY.equals(month)

"FEBRUARY" является литералом String, а month является экземпляром Month, что делает их несопоставимыми.

Существует LocalDate#isLeapYear, поэтому ваше состояние может быть уменьшено до

if (v.getDate().isLeapYear()) {
    // handle a leap year
}
1 голос
/ 05 мая 2019

Я думаю, потому что Месяц никогда не равен String.

Да, точно.Вы можете либо сравнить значение Month с Month.FEBRUARY, либо просто проверить значение, возвращаемое getMonthValue.Обратите внимание, что ваша часть дня месяца в настоящее время неверна - и ваша проверка года неверна для лет, делимых на 100. К счастью, вам не нужно знать эту часть - дата может только быть февралем29-й в високосном году в любом случае.Я бы использовал:

LocalDate date = v.getDate();
if (date.getMonthValue() == 2 && date.getDayOfMonth() == 29) {
    // Leap day handling
}
...