为什么此SimpleDateFormat无法解析此日期字符串?

问题描述 投票:4回答:4

SimpleDateFormat:

SimpleDateFormat pdf = new SimpleDateFormat("MM dd yyyy hh:mm:ss:SSSaa");

pdf.parse("Mar 30 2010 5:27:40:140PM");引发的异常:

java.text.ParseException: Unparseable date: "Mar 30 2010 5:27:40:140PM"

有什么想法吗?


编辑:谢谢您的快速解答。你们都是正确的,我只是错过了SimpleDateFormat文档中的一个关键句子-我应该把它叫做一天。

java parsing date simpledateformat
4个回答
8
投票

来自SimpleDateFormat javadocs

月:如果图案数量字母为3或更多,月份为解释为文本不然是解释为数字。

尝试使用“ MMM dd yyyy”之类的模式


11
投票

首先,三个字符的月份用MMM表示。其次,用h表示两位数的小时数。第三,Mar似乎是英语,您需要提供Locale.ENGLISH,否则它在具有不同默认语言环境的计算机中将无法正常工作。

以下作品:

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy h:mm:ss:SSSa", Locale.ENGLISH);
System.out.println(sdf.parse("Mar 30 2010 5:27:40:140PM"));

结果(我是GMT-4,没有夏令时):

2010年3月30日星期二17:27:40 BOT

另请参见java.text.SimpleDateFormat javadoc

为什么您称它为java.text.SimpleDateFormat不在我身旁,所以我将其重命名为pdf;)


6
投票

MM代表数字月份。使用MMM。


0
投票

java.time

我提供了现代的答案。其他答案是正确的,但是众所周知,您使用的sdf类麻烦且久已过时。相反,我使用的是java.time,这是现代的高级Java日期和时间API。

SimpleDateFormat

输出:

2010-03-30T17:27:40.140

Link: DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MMM d uuuu h:mm:ss:SSSa", Locale.ROOT); String dateTimeString = "Mar 30 2010 5:27:40:140PM"; LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter); System.out.println(dateTime); 解释如何使用java.time。

© www.soinside.com 2019 - 2024. All rights reserved.