2010-04-08 7 views
3

ma chaîne d'entrée est: 2010-03-24T17: 28: 50.000ZProblème de conversion de DateFormat dans Java?

motif de sortie est comme:

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

i convertir ce comme ceci:

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

ouput devrait être comme ceci: Jeu. Mar. 24. 2010 idée

mais j'obtiens un illegalArgumentException. Ne sais pas pourquoi? une idée??

message stacktrace est:

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) 
+0

IllegalArgumentException où? Je posterais la trace de la pile. –

Répondre

13

Le problème est dans cette partie:

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

Apparemment, il ne l'accepte pas les dates/heures dans ce format.

Vous ne devriez pas utiliser ce constructeur de toute façon - créer un formatter approprié pour analyser ce format particulier, puis analyser avec cela.

Vous pouvez également utiliser Joda Time pour commencer et éviter complètement l'utilisation de DateFormat. Je ne sais pas si vous pouvez utiliser Joda Time d'Android, remarquez ... et c'est assez grand.

EDIT: Pour le préciser explicitement:

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 
+0

joda temps n'est pas pratique avec Android. Je pense que nous pouvons avoir un autre moyen en Java? Je veux dire que nous pouvons mentionner la date et l'heure d'entrée et de sortie. Puis je le convertis. – Praveen

+2

SimpleDateFormat a un motif sur son JavaDoc qui correspond à cette'AAAA-MM-jj'T'HH: mm: ss.SSSZ' – Powerlord

+2

Comme Jon Skeet dit utiliser un SimpleDateFormat pour analyser la date, semblable à la façon dont vous utilisez déjà au format la date. –