我有一个SimpleDateFormat format = new SimpleDateFormat("d M y H:m");
,我尝试用它来解析字符串"8 Jan 2019 16:47"
,但是我得到了ParseException。我创建方法有误吗?
根据docs.oracle.com,M应该识别3个字母的月。
谁能帮我吗?
答案 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)
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 tutorial: Date Time解释了如何使用java.time
。