【问题标题】:Dealing with LocalDate and Months names处理 LocalDate 和 Months 名称
【发布时间】:2019-09-23 06:55:36
【问题描述】:

我有一个 .txt 文件,我将它导入到我的 Java 程序中,例如 ("2012.12.01")。我得到了月份(有趣,因为我从不使用 getDayOfMonth().name(); 部分,即使这样它写的是名称,而不是数字(JANUARY 而不是 011)。所以我试图确定是否月份是否是二月。但即使是真的,if 也会返回 false。 也许是因为月份永远不等于字符串。

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;
            }

【问题讨论】:

    标签: java localdate leap-year


    【解决方案1】:

    我猜是因为月份从不等于字符串。

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

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

    【讨论】:

      【解决方案2】:

      应该是

      Month.FEBRUARY.equals(month)
      

      "FEBRUARY"String 文字,monthMonth 实例,这使得它们无法比较。

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

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

      【讨论】:

        猜你喜欢
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-16
        • 2017-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多