import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;
import java.text.DateFormat;
import java.util.Locale;
class Main {
public static void main(String[] args)throws ParseException{
Scanner sc=new Scanner(System.in);
System.out.println("enter the date");
String p=sc.nextLine();
SimpleDateFormat d=new SimpleDateFormat("dd/MM/yyyy",Locale.ENGLISH);
SimpleDateFormat i=new SimpleDateFormat("dd/MM/yyyy");
try {
Date m=d.parse(p);
System.out.println("The input date is"+i.format(m));
} catch(ParseException e){
e.printStackTrace();
}
}
}
当我运行此问题时,我收到错误
java.text.ParseException:Unparseable date:" 27-01-1978"在 java.text.DateFormat.parse(DateFormat.java:366)at Main.main(Main.java:19)。
应该做些什么来避免这个错误。
答案 0 :(得分:1)
这是非常基本的:
DateTimeFormatter formatterWithHyphens = DateTimeFormatter.ofPattern("dd-MM-uuuu");
DateTimeFormatter formatterWithSlashes = DateTimeFormatter.ofPattern("dd/MM/uuuu");
LocalDate date = LocalDate.parse(p, formatterWithHyphens);
System.out.println("The input date is" + date.format(formatterWithSlashes));
输出
输入日期为27/01 / 1978
我建议您避开课程SimpleDateFormat
和Date
。它们已经过时了,而前者尤其出了名的麻烦。相反,我正在使用和推荐现代Java日期和时间API java.time
。一般来说,使用它会更好。
你只需要在问题标题中使用你自己给出的模式:dd-MM-yyyy。当您输入日期中有连字符(短划线)时,格式模式字符串也需要它们。
那为什么我使用uuuu
代替yyyy
?我真的可以将yyyy
与java.time
一起使用,多年来在共同时代(“anno domini”)没有区别。 uuuu
是签名年份,因此0等于1 BCE,1等于2 BCE等。我的习惯是使用uuuu
,除非有yyyy
的原因。
此外:使用比d
,i
,m
和p
更多的解释变量名称。我相信这会让你自己更容易。
java.time
。DateTimeFormatter
documentation,带有此类的模式字母