2017-04-14 2 views
-3

Ich versuche, Zeichenfolge in Datum Asynctask durch Parsen JSON String zu konvertieren. Ich verwies auf diesen Link: How to convert "Mon Jun 18 00:00:00 IST 2012" to 18/06/2012?Konvertieren Zeichenfolge in Datum mit IST

//String dateStr = "Mon Jun 18 00:00:00 IST 2012"; 

changedDate = jsonObjectMain.getString("date"); 
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy"); 
Date date = (Date)formatter.parse(changedDate); 
System.out.println(date);   

Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 
String formatedDate = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" +   cal.get(Calendar.YEAR); 
System.out.println("formatedDate : " + formatedDate); 

Wenn ich diesen Code in Android Studio laufen, es gibt mir unter Ausnahme:

04-14 12: 35: 53,363 22.963-22.963/com .trial W/System.err: java.text.ParseException: Ungültiges Datum: "Mo Jun 18 00:00:00 IST 2012" (bei Offset 20) 04-14 12: 35: 53.367 22963-22963/com. Versuch W/System.err: bei java.text.DateFormat.parse (DateFormat.java:579) 04-14 12: 35: 5 3.367 22963-22963/com.trial W/System.err: um com.trial.Activity.StartActivity.onClick (StartActivity.java:124) 04-14 12: 35: 53,367 22963-22963/com.trial W/System.err: um android.view.View.performClick (View.java:5210) 04-14 12: 35: 53,367 22963-22963/com.trial W/System.err: um android.view.View $ PerformClick.run (View.java:21183) 04-14 12: 35: 53.367 22963-22963/com.trial W/System.err: um android.os.Handler.handleCallback (Handler.java:739) 04- 14 12: 35: 53.367 22963-22963/com.trial W/System.err: um android.os.Handler.dispatchMessage (Handler.java:95) 04-14 12: 35: 53.367 22963-22963/com .trial W/System.err: um android.os.Looper.loop (Looper.java:148) 04-14 12: 35: 53.367 22963-22963/com.trial W/System.err: unter android.app.ActivityThread.main (ActivityThread.java:5438) 04-14 12: 35: 53.367 22963-22963 /com.trial W/System.err: um java.lang.reflect.Method.invoke (native Methode) 04-14 12: 35: 53.367 22963-22963/com.trialW/System.err: um com. android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:762) 04-14 12: 35: 53.367 22963-22963/com.trial W/System.err: um com.android.internal.os. ZygoteInit.main (ZygoteInit.java:652)

Aber wenn ich laufen gleichen Code in eclipse durch das Erstellen eines einfachen Programms, läuft es sehr gut.

Ich wurde gefragt, ich weiß nicht, warum ist das passiert. Also, ich habe den gleichen Code in einer anderen Aktivität auf Knopf klicken, aber nicht funktioniert.

Vielen Dank. Jede Hilfe wird geschätzt.

+0

Convert IST Saite ist ziemlich schwierig. Ich glaube, dass der Fehler, den Sie bekommen, wegen des 'IST' ist. Darf ich wissen, ob die Zeitzone IST oder dynamisch ist? –

+0

Ich bekomme String von JSON mit diesem Format "Mon Jun 18 00:00:00 IST 2012". Also bin ich mir nicht sicher, ob die Zeitzone fest ist oder nicht. –

+1

Wenn Sie können, bleiben Sie weg von drei Buchstaben Zeitzonenabkürzungen. IST kann India Standard Time, Irish Standard Time oder Israel Standard Time bedeuten. Besser zu verwenden zum Beispiel "Asien/Kolkata", "Europa/Dublin" oder "Asien/Tel_Aviv". –

Antwort

0

Versuchen Formatwechsel auf "EEE MMM dd HH: mm: ss yyyy" und IST Zone ausgewählt

changedDate = changedDate.replace("IST ", ""); 
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyy"); 
TimeZone timeZone=TimeZone.getTimeZone("IST"); 
formatter.setTimeZone(timeZone); 

Date date = (Date)formatter.parse(changedDate); 
+0

Ich habe das auch versucht, aber nicht funktioniert. –

+0

Aktualisierte Antwort funktioniert gut. – Pehlaj

+1

Ja, das funktioniert, großartig! Vielen Dank. –

1

Ich bin mir bewusst, dass die neueren java.time Klassen auf Android verwendet, benötigt eine externe Abhängigkeit (ThreeTenABP) und auch, dass Sie jetzt eine funktionierende Lösung haben. Für alle anderen zusammen, dass das Lesen entweder Java 8 oder höher oder mit einer Bibliothek Abhängigkeit zufrieden sind können hier, wie zu tun:

String dateStr = "Mon Jun 18 00:00:00 IST 2012"; 

DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss z uuuu", Locale.ENGLISH); 
LocalDate date = LocalDate.parse(dateStr, inputFormat); 

String formattedDate = date.format(DateTimeFormatter.ofPattern("dd/MM/uuuu")); 

System.out.println(formattedDate); 

Wenn Sie im Voraus wissen, dass die Zeichenfolge richtig Tag, Monat und Jahr enthält, Sie kann die Zeitzone vollständig ignorieren.

Link: Die java.time Klassen (von denen LocalDate ist nur eine von vielen hilfreich) kann auf Android durch the ThreeTenABP verwendet werden. Das ist ThreeTen für JSR-310 und ABP für Android Backport.

PS Wenn Sie einige weitere Validierung Ihrer Eingabestring möchten, können Sie beispielsweise, dass die Zeit Teil prüfen ist gleich der Beginn des Tages in der angegebenen Zeitzone:

ZonedDateTime zdt = ZonedDateTime.parse(dateStr, inputFormat); 
if (! zdt.equals(zdt.toLocalDate().atStartOfDay(zdt.getZone()))) { 
    throw new IllegalArgumentException("Input date was not at midnight"); 
} 
Verwandte Themen