Как преобразовать ДД/ММ/ГГГГ «13/09/21» просто в «Вторник, 1 апреля»

#android #kotlin #time

Вопрос:

Добрый день, я хочу преобразовать свой simpledateformat, чтобы показать «Вторник, 1 апреля», например, с «15/09/21», мне было интересно, как мне преобразовать его в это? Я прикрепил изображение того, как это выглядит раньше.

Мой код, вызывающий дату:

             addAll(pending.sortedByDescending { it.finishDate.convertToDate()?.time })
            addAll(accepted.sortedByDescending { it.finishDate.convertToDate()?.time })
 

Где время называется:

 fun String.convertToDate(): Date? {
    val sdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
    return try {
        sdf.parse(this)
    } catch (e: ParseException) {
        Timber.e("wrong date format - parsing not possible")
        null
    }
}
 

Пример Даты

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

1. «15/19/21» не похоже на действительную дату

2. если вы говорите об изображении, то это 15/09/21?

3. дата , указанная в вашем вопросе, неверна, на изображении она правильная

4. моя вина, теперь все исправлено

5. Подумайте о том, чтобы выбросить давно устаревшие и заведомо хлопотные SimpleDateFormat и друзья. Посмотрите, можете ли вы использовать десугаринг или добавить ThreeTenABP в свой проект Android, чтобы использовать java.time, современный API даты и времени Java. С ним намного приятнее работать.

Ответ №1:

SimpleDateFormat это давно устарело и хлопотно, как предлагает @Ole V update to DateTimeFormatter , Вот пример кода для того же

         DateTimeFormatter formatter = null;
        String date  = "2021-09-16T11:36:15";
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
            LocalDateTime dateTime = LocalDateTime.parse(date, formatter);
            DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("EEEE, MMM d"); // use MMMM to show full month name
            Log.e("Date", ""   dateTime.format(formatter2) );
        }
 

Чтобы использовать это ниже Android 8 , используйте десугаринг

Выходной четверг, 16 сентября

Ответ №2:

попробуйте это

 fun changedate(olddate:String):String{
        var changedDate:String = ""
        try {
            val dateFormatprev = SimpleDateFormat("dd/MM/yyyy")
            val d: Date = dateFormatprev.parse(olddate)
            val dateFormat = SimpleDateFormat("EEE, MMM dd")
             changedDate = dateFormat.format(d)
            println(changedDate)
        } catch (e: ParseException) {
            e.printStackTrace()
        }
        return changedDate
    }
 

использование

  Log.e("TAG",changedate("01/01/2021"))