java.text.ParseException: Неразрешимая дата: «16 октября 2016» (со смещением 3)

#java #android

#java #Android

Вопрос:

Я пытаюсь преобразовать формат даты из «16 октября 2016» в «2016-10-16 00:00:00» и наоборот. первый формат используется для отображения в приложении, а второй — для отправки в базу данных sql. Я использую следующий код,

 convertedBirthdate = Helper.convertDateFormat(birthdate,
                    "d mmmm yyyy", "yyyy-mm-dd hh:mm:ss");
 

 public static String convertDateFormat(String dateTime, String previousFormat,
                                    String destinationFormat) {

        String formattedDateTime = null;

        try {
            DateFormat dateFormat = new SimpleDateFormat(previousFormat);
            Date date = dateFormat.parse(dateTime);
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(destinationFormat);
            formattedDateTime = simpleDateFormat.format(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return formattedDateTime;

    }
 

но я получил следующее исключение ошибки,

 10-16 18:34:45.023 15313-15313/id.co.impilo.patient W/System.err: java.text.ParseException: Unparseable date: "16 Oktober 2016" (at offset 3)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at java.text.DateFormat.parse(DateFormat.java:579)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at id.co.impilo.patient.helper.Helper.convertDateFormat(Helper.java:171)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at id.co.impilo.patient.activities.ActivityAddPatient.callAddPatientAPI(ActivityAddPatient.java:832)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at id.co.impilo.patient.activities.ActivityAddPatient.addPatient(ActivityAddPatient.java:302)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at id.co.impilo.patient.activities.ActivityAddPatient_ViewBinding$4.doClick(ActivityAddPatient_ViewBinding.java:87)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at android.view.View.performClick(View.java:5217)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at android.view.View$PerformClick.run(View.java:21342)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at android.os.Looper.loop(Looper.java:148)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5551)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
10-16 18:34:45.028 15313-15313/id.co.impilo.patient W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
 

Комментарии:

1. Вероятно, проблема с локализацией

2. Вам не кажется странным, что вы используете один и тот же символ для месяца и минуты ? developer.android.com/reference/java/text/SimpleDateFormat.html

3. Октябрь не соответствует действительности! измените его на октябрь 🙂

4. Кстати, SQLite предоставляет свои собственные функции форматирования даты. Преобразование в отображение через Java не должно быть необходимым

5. Вероятно, в 157-й раз: месяц есть M , нет m .

Ответ №1:

Я редактирую свой код, добавляя Locale.getDefault() для решения проблемы,

 public static String convertDateFormat(String dateTime, String previousFormat,
                                    String destinationFormat) {

        String formattedDateTime = null;

        try {
            DateFormat dateFormat = new SimpleDateFormat(previousFormat, Locale.getDefault());
            Date date = dateFormat.parse(dateTime);
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(destinationFormat, Locale.getDefault());
            formattedDateTime = simpleDateFormat.format(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return formattedDateTime;

    }