SimpleDateFormat не работает в Android Kitkat

Этот метод не работает для Android Kitkat, но очень хорошо работает в Android Oreo.

   public String parseDateToTime(String time) {

    String inputPattern = "dd/MM/yyyy hh:mm aa";
    String outputPattern = "hh:mm aa";
    SimpleDateFormat inputFormat = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        inputFormat = new SimpleDateFormat(inputPattern);
    }
    SimpleDateFormat outputFormat = null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        outputFormat = new SimpleDateFormat(outputPattern);
    }

    Date date = null;
    String str = null;

    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            date = inputFormat.parse(time);
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            str = outputFormat.format(date);
        }


    } catch (ParseException e) {
        e.printStackTrace();
    }
    Log.d("timecon",str);

person kanaga    schedule 12.10.2018    source источник
comment
Убедитесь, что вы импортировали этот import java.text.SimpleDateFormat; вместо этого import android.icu.text.SimpleDateFormat;   -  person AskNilesh    schedule 12.10.2018
comment
import android.icu.text.SimpleDateFormat Я использую этот   -  person kanaga    schedule 12.10.2018
comment
Вам нужно использовать этот import java.text.SimpleDateFormat; проверить этот stackoverflow .com/questions/39055963/   -  person AskNilesh    schedule 12.10.2018
comment
Вы всегда исключаете KitKat. inputFormat и outputFormat всегда равны нулю из-за этого условия if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N), поэтому код пропустит блок try-except   -  person Lorenzo Vincenzi    schedule 12.10.2018
comment
В качестве отступления подумайте о том, чтобы выбросить давно устаревший и заведомо неприятный SimpleDateFormat и друзей и добавить ThreeTenABP на свой Android. проект, чтобы использовать java.time, современный API даты и времени Java. С ним намного приятнее работать.   -  person Ole V.V.    schedule 13.10.2018


Ответы (2)


в вашем коде вы использовали Build.VERSION_CODES.N, что означает Android Nougat, поэтому, когда Android Kitkat старше, чем Android N, тогда Build.VERSION.SDK_INT >= Build.VERSION_CODES.N не будет правдой, но потому что android Oreo новее Android Nougat Build.VERSION.SDK_INT >= Build.VERSION_CODES.N будет верным, и ваш код в блоке if будет работать.

вы можете проверить эту ссылку, чтобы увидеть константы Android VERSION_CODES.

person arsalanelec    schedule 12.10.2018

Мир кода не выполняется при проверке вашей версии. Поскольку Android Kitkat старше, чем android N (Nougat).

Build.VERSION.SDK_INT >= Build.VERSION_CODES.N.

Он будет выполняться только на устройствах ОС N и выше.

person Ramesh Yankati    schedule 12.10.2018