处理LocalDate和Months名称

时间:2019-05-05 11:54:21

标签: java localdate leap-year

我有一个.txt文件,我将其导入到Java程序中,例如("2012.12.01")。我得到一个月(有趣的是,因为我从未使用过getDayOfMonth().name();部分,所以它写的是名称而不是数字({JANUARY而不是011)因此,我试图确定月份是否为2月,但是即使是真实的月份,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 个答案:

答案 0 :(得分:3)

应该是

Month.FEBRUARY.equals(month)

"FEBRUARY"String的文字,而monthMonth的实例,这使它们无与伦比。

LocalDate#isLeapYear,因此您的情况可以减少为

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

答案 1 :(得分:1)

  

我想是因为月份永远不等于字符串。

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

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