找不到方法格式的符号(DateTimeFormatter)?

Cannot find symbol for method format(DateTimeFormatter)?

我遇到了一个问题,我绝对无法解决这个问题。我对 Java(或任何语言,就此而言)没有经验,如果这是一个愚蠢的问题,请原谅。

据我所知,java.time.format.DateTimeFormatter 中的 format() 方法并没有像我想象的那样工作。我一直收到以下错误消息 (CLI):

Watch.java:609: error: cannot find symbol
                String dateTimeDisplay = dateTime.format(dateTimeFormat);
                                                 ^
  symbol:   method format(DateTimeFormatter)
  location: variable dateTime of type Object
1 error

下面是我认为相关的代码:

import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class Watch {
    
    protected int hour, hourTens, hourOnes, minute, minuteTens, minuteOnes, amPM;
    
    public void watchMethod(String userInput) { 
        
        Object dateTime; // Create reference to object called dateTime
    
        switch (userInput) {
            case "1":
            ZonedDateTime dateTimeHere = ZonedDateTime.now();
            hour = dateTimeHere.getHour();
            minute = dateTimeHere.getMinute();
            // amPM is used exclusively to display AM/PM or a heart (see lines 580 to 567).
            amPM = dateTimeHere.getHour();
            dateTime = dateTimeHere;
            break;
            
            case "2":
            ZonedDateTime dateTimeThere = ZonedDateTime.now(ZoneId.of("Europe/Paris"));
            hour = dateTimeThere.getHour();
            minute = dateTimeThere.getMinute();
            // amPM is used exclusively to display AM/PM or a heart (see lines 560 to 567).
            amPM = dateTimeThere.getHour();
            dateTime = dateTimeThere;
            break; 
            
            case "3":
            hour = -1;
            minute = -1;
            break;
        }

        // There is some code that prints things to console depending on the hour, minute, and amPM variables.
        // I don't think this is relevant, but that's what's here.

        // The following code prints out the actual date and time from a ZonedDateTime object.
        DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("hh:mm a 'on' EEEE, MMMM dd, yyyy");
        String dateTimeDisplay = dateTime.format(dateTimeFormat); // ERROR
        System.out.print("\nIt is currently " + dateTimeDisplay + "\n");
    }
}

这是全部 class。

我已经检查过我的导入是正确的,并且没有任何拼写错误!这就是与我的问题相关的其他问题让我相信问题所在,但事实并非如此。

我也不太熟悉使用 Object 作为引用类型,所以如果这可能是导致问题的原因,我并不感到惊讶。这就是我能想到的从开关块中打破 dateTimeHere/dateTimeThere 的所有方法。

无论如何,如果我能得到任何帮助,我将不胜感激。

快速编辑:我还认为如果没有合适的 dateTime 对象(即案例“3”),这也会导致错误。我简单地添加了一个 if/else 语句来解决这个问题,在 case "3" 中有一些代码表明 dateTime 为 null,但这绝对没有任何作用。不过,如果我应该重新添加这个,请告诉我。

编辑:感谢@MarsAtomic 的评论,我看到这个 post 可以使用另一个通读。我的问题是,在我的代码末尾,我想打印出 switch 语句检索到的 ZonedDateTime 数据,无论是来自用户的计算机位置还是“Paris/Europe”。最终,“Paris/Europe”字符串将(理想情况下)从 subclass 获得一些用户输入(与 userInput 的情况一样,但该特定字符串仅用于选择已经显示的 3 种情况之一).

您可能打算将 dateTime 声明为 ZonedDateTime,因为对象的定义不包括 format 方法。

修改后的代码:

ZonedDateTime dateTime = null; // Create reference to object called dateTime
//...
DateTimeFormatter dateTimeFormat = DateTimeFormatter.ofPattern("hh:mm a 'on' EEEE, MMMM dd, yyyy");
if (dateTime != null) {
    String dateTimeDisplay = dateTime.format(dateTimeFormat);
    System.out.print("\nIt is currently " + dateTimeDisplay + "\n");
}