Не удалось разобрать строковую дату в формате IST и GMT - PullRequest
0 голосов
/ 12 декабря 2018

Невозможно проанализировать строковую дату Sun Dec 06 11:15:00 IST 2015, используя SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"), когда я использую Locale.ENGLISH в SimpleDateFormat без Locale.ENGLISH, работающего, но

Невозможно проанализировать, когда язык приложения меняется на не английскийкак Marathi/Hindi.

Я могу анализировать другую строковую дату, например 10 12 2018 - dd MM yyyy, но не в формате выше.

Проблема на устройствах Lollipop and kit-kat. когда я меняю Locale на не английский язык.

minSdkVersion 16 и targetSdkVersion 27

1.Пробовал следующие решения.

EEE MMM дд ЧЧ: мм: сс Z гггг, EEE МММ дд ЧЧ: мм: сс зггг, DateFormat и т. Д.

String tDueDate="Sun Dec 06 11:15:00 IST 2015"; 
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH);
        Date dt = sdf.parse(tDueDate);
        sdf = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
        return sdf.format(dt);

сб. Окт. 03 00:00: 00 IST 2018 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: java.text.ParseException: дата не разборчива: «сб. 03 октября 00:00:00IST 2018 "(со смещением 20) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at java.text.DateFormat.parse (DateFormat.java:555) 12-12 13: 16: 33,733 17653-17653 / com.smartsms.organizer.events W / System.err: at com.smartsms.util.EventsUtil.returnDateInDateFormat (EventsUtil.java:750) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.ошибка: в com.smartsms.fragment.EventsFragmentNew $ MyTask.onPostExecute (EventsFragmentNew.java:1397) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: в com.smartsms.fragment.EventsFragmentNew $ MyTask.onPostExecute (EventsFragmentNew.java:1295) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: в android.os.AsyncTask.finish (AsyncTask.java: 632) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at android.os.AsyncTask.access $ 600 (AsyncTask.java:177) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at android.os.AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:645) 12-12 13: 16: 33.733 17653-17653 /com.smartsms.organizer.events W / System.err: at android.os.Handler.dispatchMessage (Handler.java:102) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at android.os.Looper.loop (Looper.java:136) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.события W / System.err: at android.app.ActivityThread.main (ActivityThread.java:5111) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at java.lang.reflect.Method.invokeNative (собственный метод) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at java.lang.reflect.Method.invoke (Method.java: 515) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:806) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:622) 12-12 13:16:33.733 17653-17653 / com.smartsms.organizer.events W / System.err: at dalvik.system.NativeStart.main (собственный метод) 12-12 13: 16: 33.733 17653-17653 / com.smartsms.organizer.events

Активитайлокаль: en_US

Ответы [ 4 ]

0 голосов
/ 13 декабря 2018

Я искал ответ, почему он не может обработать String Sun Dec 06 11:15:00 IST 2015 using SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy") другие форматы даты, такие как String date 01 10 2018 это с форматом dd MM YYYY, способным анализировать, но не выше.Итак,

Я пробовал этот альтернативный способ получить соответствующий формат даты.

Надеюсь, это поможет кому-нибудь

значение является объектом даты

Date date   = d.parse(value);
Calendar c = Calendar.getInstance();
c.setTime(date);
int dd = c.get(Calendar.DAY_OF_MONTH);
int mmm = c.get(Calendar.MONTH) + 1;
int yyyy = c.get(Calendar.YEAR);

String dateString = "" + dd + "-" + mmm + "-" + yyyy;
0 голосов
/ 12 декабря 2018

вы можете попробовать вот так:

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH);

изменить на:

SimpleDateFormat sdf1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss 'IST' yyyy", Locale.ENGLISH);
0 голосов
/ 12 декабря 2018
String dateStr = "Sun Dec 06 11:15:00 IST 2015";
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
Date date = (Date)formatter.parse(dateStr);
System.out.println(date);
0 голосов
/ 12 декабря 2018

попробуйте изменить код, например

 SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.getDefault());
        Date dt = sdf.parse(tDueDate);
        sdf = new SimpleDateFormat("dd MMM yyyy", Locale.getDefault());
        return sdf.format(dt);
...