0

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

4

2 回答 2

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

你的代码出了什么问题?

SimpleDateFormat并且Date设计不佳且过时,尤其是前者出了名的麻烦。我建议你不要在 2019 年使用它们。

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

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

关联

Oracle 教程:日期时间解释如何使用java.time.

于 2019-01-14T11:47:11.017 回答
0

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

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

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

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

SimpleDateFormat format = new SimpleDateFormat("dd MMM yyyy HH:mm");
于 2019-01-14T06:09:34.790 回答