处理 LocalDate 和 Months 名称

Dealing with LocalDate and Months names

我有一个 .txt 文件,我将其导入到我的 Java 程序中,例如 ("2012.12.01")。我得到了月份(有趣的是,因为我从不使用 getDayOfMonth().name(); 部分,即使这样它也写了名字,而不是数字(JANUARY 而不是 011) . 所以我试图确定这个月份是否是二月。但即使它是真的,if returns 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;
            }

应该是

Month.FEBRUARY.equals(month)

"FEBRUARY" 是一个 String 字面值,month 是一个 Month 实例,这使得它们无法比较。

LocalDate#isLeapYear,所以你的条件可以降为

if (v.getDate().isLeapYear()) {
    // handle a leap year
}

I guess because the Month never equal to String.

是的,没错。您可以将 Month 值与 Month.FEBRUARY 进行比较,或者只检查 getMonthValue 返回的值。请注意,您的日期部分目前是错误的 - 并且您的年份检查对于被 100 整除的年份不正确。幸运的是,您不需要知道该部分 - 日期可以 无论如何是闰年的 2 月 29 日。我会使用:

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