5

简单日期格式:

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 文档中的一个关键句子——我可能应该收工了。

4

4 回答 4

11

首先,三个字符的月份将由 表示MMM。其次,一位两位数的小时数将由 表示h。第三,Mar似乎是英语,您需要提供 a 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 没有 DST):

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

另请参阅java.text.SimpleDateFormatjavadoc

你为什么叫它pdf超出了我的范围,所以我重新命名了它sdf;)

于 2010-04-08T21:45:22.017 回答
8

来自SimpleDateFormat javadocs

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

尝试使用像“MMM dd yyyy”这样的模式

于 2010-04-08T21:42:57.360 回答
6

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

于 2010-04-08T21:42:15.430 回答
0

java.time

我正在提供现代答案。其他答案是正确的,但是SimpleDateFormat您使用的课​​程非常麻烦且早已过时。相反,我使用的是 java.time,它是现代的高级 Java 日期和时间 API。

    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);

输出:

2010-03-30T17:27:40.140

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

于 2019-11-14T05:16:34.277 回答