java:ParseException:无法解析的日期

时间:2019-01-14 05:59:56

标签: java simpledateformat datetime-parsing parseexception unparseable

我有一个SimpleDateFormat format = new SimpleDateFormat("d M y H:m");,我尝试用它来解析字符串"8 Jan 2019 16:47",但是我得到了ParseException。我创建方法有误吗? 根据docs.oracle.com,M应该识别3个字母的月。 谁能帮我吗?

2 个答案:

答案 0 :(得分:0)

官方文档:(https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

您可能在这里错过了这个小笔记:

  

月份:如果图案字母的数量为3个或更多,则月份被解释为文本;否则,它将被解释为数字。

根据您的示例输入,以下工作有效:

SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy HH:mm");

答案 1 :(得分:0)

java.time

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d MMM y H:mm", Locale.ENGLISH);

    String stringToParse = "8 Jan 2019 16:47";
    LocalDateTime dateTime = LocalDateTime.parse(stringToParse, formatter);
    System.out.println(dateTime);

此代码段的输出为:

  

2019-01-08T16:47

您的代码出了什么问题?

SimpleDateFormatDate的设计很差,而且已经过时,尤其是前者非常麻烦。我建议您在2019年不要使用它们。

正如其他人所说,您需要三个M作为月份缩写(无论您使用的是过时的SimpleDateFormat还是现代的DateTimeFormatter)。一个M将匹配一个以1或2位数字表示的月份数字,例如1表示一月。

还应该为格式化程序指定一个语言环境。我以Jan为英语,因此指定为Locale.ENGLISH。如果您未指定语言环境,则将使用JVM的默认语言环境,这可能在某些JVM上运行良好,并且在更改默认语言环境或尝试在另一台计算机上运行程序时突然中断了一天。 >

链接

Oracle tutorial: Date Time解释了如何使用java.time