【问题标题】:why there is giving can not find symbol in LocalDate and Month classes [closed]为什么在 LocalDate 和 Month 类中找不到符号 [关闭]
【发布时间】:2021-12-28 07:32:32
【问题描述】:
import java.time.LocalDate;
import java.time.Month;

public class Birthday{
   public static void main(String args[]) {

    // declare variables for birthday
    int birthDate = 23;
    Month birthMonth = Month.SEPTEMBER;

    // get current date
    LocalDate currentDate = LocalDate.now();
    System.out.println("Todays Date: " + currentDate);

    // get current date and month
    int date = currentDate.getDayOfMonth();
    Month month = currentDate.getMonth();

    if(date == birthDate && month == birthMonth) {
      System.out.println("HAPPY BIRTHDAY TO YOU !!");
    }
    else {
      System.out.println("Today is not my birthday.");
    }
   }
}

【问题讨论】:

  • 你用的是什么版本的java?
  • 请将错误消息的确切文本粘贴到您的问题中。
  • 修复您的代码格式。要么全部缩进四个空格,要么用一对三重反引号换行。
  • LocalDateMonth 从 Java 8 开始可用,可能使用的 Java 较旧

标签: java localdate monthcalendar


【解决方案1】:

您的代码运行成功。请参阅code run live at IdeOne.com

Java 8+

由于您提供的细节很少,我猜您的问题是由于使用了非常旧的 Java 版本。

java.time内置于 Java 8 及更高版本以及 Android 26+。

  • 如果使用 Java 6 或 7,请通过将 ThreeTen-Backport 库添加到您的 Java 项目来获得大部分 java.time 功能。
  • 如果使用早期的 Android,最新的工具通过“API 脱糖”提供大部分 java.time 功能。

我将继续在您的代码中提到几个其他问题。

Enum#equals

您应该将== 的使用替换为对象引用,例如Month 对象。虽然这在技术上适用于枚举对象,但在对象上使用 == 是一个坏习惯,与调用 Enum#equals 相比没有任何好处。

if( date == birthDate && month.equals( birthMonth ) ) {

MonthDay

使用MonthDay 制作一个简短的版本。

MonthDay currentMonthDay = MonthDay.now() ;
MonthDay birthMonthDay = MonthDay.of( Month.SEPTEMBER , 23 ) ;
if( currentMonthDay.equals( birthMonthDay ) ) {…}

或单线:

if( MonthDay.now().equals( MonthDay.of( Month.SEPTEMBER , 23 ) ) ) { … }

【讨论】:

  • Month 是一个enum。可以和==比较。
  • @gmanjon 我添加了一条关于这是一个坏习惯的注释,在技术上并非不正确。谢谢你的提示。
猜你喜欢
  • 2014-04-05
  • 2014-11-06
  • 2021-07-26
  • 2019-08-28
  • 2013-02-02
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
相关资源
最近更新 更多