为什么在 LocalDate 和 Month 中有 giving cannot find symbol 类

why there is giving can not find symbol in LocalDate and Month classes

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.");
    }
   }
}

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

Java8+

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

java.time内置于 Java 8 及更高版本中,并且 Android 26+.

  • 如果使用 Java 6 或 7,通过添加 java.time 获得大部分 java.time 功能=21=] 库到您的 Java 项目。
  • 如果使用 早期的 Android,最新的工具通过“API 脱糖。

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

Enum#equals

您应该将 == 的使用替换为对象引用,例如 Month objects. While that technically works with enum objects, using == on objects is a bad habit, with no benefit gained over calling 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 ) ) ) { … }