views:

331

answers:

1

my input String is : 2010-03-24T17:28:50.000Z

output pattern is like:

DateFormat formatter1 = new SimpleDateFormat("EEE. MMM. d. yyyy");

i convert this like this:

formatter1.format(new Date("2010-03-24T17:28:50.000Z"));//illegalArgumentException here the string "2010-03-24T17:28:50.000Z"

ouput should be like this: Thu. Mar. 24. 2010 idea

but i get a illegalArgumentException. Dont know why? any idea??

stacktrace message is:

04-08 19:50:28.326: WARN/System.err(306): java.lang.IllegalArgumentException
04-08 19:50:28.345: WARN/System.err(306):     at java.util.Date.parse(Date.java:447)
04-08 19:50:28.355: WARN/System.err(306):     at java.util.Date.<init>(Date.java:157)
04-08 19:50:28.366: WARN/System.err(306):     at com.example.brown.Bru_Tube$SelectDataTask.doInBackground(Bru_Tube.java:222)
04-08 19:50:28.366: WARN/System.err(306):     at com.example.brown.Bru_Tube$SelectDataTask.doInBackground(Bru_Tube.java:1)
04-08 19:50:28.405: WARN/System.err(306):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-08 19:50:28.415: WARN/System.err(306):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-08 19:50:28.415: WARN/System.err(306):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-08 19:50:28.446: WARN/System.err(306):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
04-08 19:50:28.456: WARN/System.err(306):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
04-08 19:50:28.466: WARN/System.err(306):     at java.lang.Thread.run(Thread.java:1096)
+6  A: 

The problem is in this part:

new Date("2010-03-24T17:28:50.000Z")

Apparently it doesn't accept dates/times in that format.

You shouldn't be using that constructor anyway - create an appropriate formatter to parse that particular format, and then parse it with that.

Alternatively, use Joda Time to start with, and avoid using DateFormat completely. I don't know if you can use Joda Time from Android, mind you... and it's fairly large.

EDIT: To spell it out explicitly:

String inputText = "2010-03-24T17:28:50.000Z";
// "Z" appears not to be supported for some reason.
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
inputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
DateFormat outputFormat = new SimpleDateFormat("EEE. MMM. d. yyyy");
Date parsed = inputFormat.parse(inputText);
String outputText = outputFormat.format(parsed);

// Output is Wed. Mar. 24 2010 on my box
Jon Skeet
joda time is not convenient with android. i think so.can we have any other way in java? i mean can we mention the date and time input and output format.and then i convert it.
Praveen Chandrasekaran
SimpleDateFormat has a pattern on its JavaDoc that matches this `yyyy-MM-dd'T'HH:mm:ss.SSSZ`
R. Bemrose
As Jon Skeet says use a SimpleDateFormat to parse the date, similar to how you already use it to format the date.
Andrea Polci
SimpleDateFormat is the way to go
mbaird
how to use that? i cant get u people. plz elobrate... :(
Praveen Chandrasekaran
@androidbase: Which bit of it don't you understand? Use `new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")` to create an appropriate date format, then call `format.parse("2010-03-24T17:28:50.000Z")` to get a `Date`.
Jon Skeet
@OMG Unicorns: Looks like the Z time zone format doesn't support the literal "Z" bizarrely enough. I've set it explicitly...
Jon Skeet
@Jon Skeet: I was wondering about that, as I didn't see it mentioned on the `SimpleDateFormat` page. I guess I should have tested it. P.S. OMG Unicorns is a parody name, but I can't change it again until May 1st... stupid 30 day rule... *grumble*
R. Bemrose