views:

263

answers:

3

The SimpleDateFormat:

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

The exception thrown by pdf.parse("Mar 30 2010 5:27:40:140PM");:

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

Any ideas?


Edit: thanks for the fast answers. You were all correct, I just missed that one key sentence in the SimpleDateFormat docs - I should probably call it a day.

+4  A: 

MM stands for numeric month. Use MMM.

Eyal Schneider
+2  A: 

From SimpleDateFormat javadocs:

Month: If the number of pattern letters is 3 or more, the month is interpreted as text; otherwise, it is interpreted as a number.

Try to use pattern like "MMM dd yyyy"

Roman
+2  A: 

First, three-char months are to be represented by MMM. Second, one-two digit hours are to be represented by h. Third, Mar seems to be English, you'll need to supply a Locale.ENGLISH, else it won't work properly in machines with a different default locale.

The following works:

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

Result (I'm at GMT-4 w/o DST):

Tue Mar 30 17:27:40 BOT 2010

Also see the java.text.SimpleDateFormat javadoc.

Why you called it pdf is beyond me, so I renamed it sdf ;)

BalusC
I knew that would come up! It's called `pdf` because it's my DateFormat for Parsing (String => Date); I have another Date Format for Formatting (parsed Date => String). If I only had 1 DateFormat in scope, yes, I would have called it `sdf`.
Matt Ball