找不到方法格式的符号(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");
}
我遇到了一个问题,我绝对无法解决这个问题。我对 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");
}