我很难让我的 getDate
方法起作用。我提示用户输入日期样式 MM/dd/yyyy 作为字符串。我需要将字符串转换为日期对象并返回它。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public static String getDate(String prompt) {
String dateAsString = getString(prompt);
do {
System.out.println(prompt);
dateAsString = keyboard.nextLine();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yyyy");
LocalDate dateAsString1=formatter.parse(dateAsString1);
}
while (dateAsString == null || dateAsString.length() < 1);
return dateAsString;
}
答案 0 :(得分:2)
您当前的方法做了太多事情。只需传入要转换为 String
的 LocalDate
并使用 LocalDate.parse(CharSequence, DateTimeFormatter)
解析该 String
并返回结果。类似的东西,
public static LocalDate parseDate(String str) {
return LocalDate.parse(str, DateTimeFormatter.ofPattern("M/d/yyyy"));
}
为了测试它,我只是做了
public static void main(String[] args) {
System.out.println(parseDate("10/31/2021"));
}
最后,我建议对您的方法进行明确且单独的关注。这样调试起来就容易多了。
答案 1 :(得分:0)
DateTimeFormatter 没有任何称为“.parse()”的方法。只有 LocalDate 有 ".parse()" 方法,我们需要在 String
函数中传递 DateTimeFormatter
和 parse()
。当给定的字符串与模式不匹配时,它会抛出一个错误(DateTimeParseException
)!所以我添加了 Try and Catch 方法
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/yyyy");
try{ LocalDate dateAsString1 = LocalDate.parse(dateAsString,formatter); }
catch(DateTimeParseException e){
//Wrong String Formation
}