Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why can't this SimpleDateFormat parse this date string?

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.

like image 253
Matt Ball Avatar asked Apr 08 '10 21:04

Matt Ball


2 Answers

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

like image 123
BalusC Avatar answered Nov 01 '22 09:11

BalusC


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"

like image 21
Roman Avatar answered Nov 01 '22 09:11

Roman