Конверт даты из паттерна "MMMM yyyy" в кастомный двубуквенный паттерн

Сегодня с столкнулся с проблемой форматирования дат в календаре на Kotlin.

Не уверен, что это проблема форматирования, однако буду рад любому решению.

Задача состоит в шифровании даты 01. 01. 2028 без числа вида "MMMM yyyy" в двухбуквенную запись, где первая буква месяц от A до L, а вторая год от A до Z. Шерстил документацию от Google Developers, перелопатил DateTimeFormatter, добрался до Calendar. Нашёл похожее решение, и даже текущую дату форматирует, однако вывод даты из базы данных в формате "MMMM yyyy" переделать под этот паттерн не получается. Мучаюсь второй день, помогите пожалуйста.

Column(
                                        modifier = Modifier.fillMaxWidth().padding(16.dp).weight(1f)
                                    ) {
                                        Text(
                                            text = "Заказ # ${order.id}"
                                        )
                                        Text(
                                            text = "От ${
                                                LocalDateTime.parse(order.created)
                                                    .format(DateTimeFormatter.ofPattern("d MMMM yyyy"))
                                            }"
                                        )
                                        Text(
                                            text = "Комментарий к заказу: ${order.commentary}"
                                        )
                                        Text(
                                            text = "Текущий статус заказа: "
                                        )
                                        Text(
                                            text = "Тип документа: "
                                        )
                                        val monthNames = arrayOf(
                                            "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"
                                        )
                                        val yearNames = mapOf<String, String>(
                                            "2024" to "O",
                                            "2026" to "A", "2027" to "B", "2028" to "C", "2029" to "D", "2030" to "E",
                                            "2031" to "F", "2032" to "G", "2033" to "H", "2034" to "I", "2035" to "J",
                                            "2036" to "K", "2037" to "L"
                                        )
                                        val calendar = Calendar.getInstance()
                                        val month = monthNames[calendar.get(Calendar.MONTH)]
                                        yearNames.forEach{entry ->
                                            if (entry.key.toString().equals(calendar.get(Calendar.YEAR).toString())){
                                                Text(
                                                    text = "От ${
                                                        LocalDateTime.parse(order.created)
                                                            .format(DateTimeFormatter.ofPattern("MMMM yyyy"))
                                                    }"
                                                )
                                                Text(
                                                    text = "Сейчас месяц " + month + " Сейчас год " + entry.value
                                                )
                                            }
                                        }
                                    }

Вывод данного кода сейчас:


Ответы (1 шт):

Автор решения: PseudoNIMB

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

                                val monthNames = mapOf(
                                "1" to "A", "2" to "B", "3" to "C", "4" to "D", "5" to "E", "6" to "F",
                                "7" to "G", "8" to "H", "9" to "I", "10" to "J", "11" to "K", "12" to "L"
                            )
                            val yearNames = mapOf(
                                "2024" to "O",
                                "2025" to "A", "2026" to "B", "2027" to "C", "2028" to "D", "2029" to "E",
                                "2030" to "F", "2031" to "G", "2032" to "H", "2033" to "I", "2034" to "J",
                                "2035" to "K", "2036" to "L"
                            )

                            var text11 = LocalDateTime.parse(order.created)
                                .format(DateTimeFormatter.ofPattern("Myyyy"))
                            var resulti = text11.toString()
                            yearNames.forEach {t, u ->
                                resulti = resulti.substring(0).replace(t,u)
                            }
                            var result = resulti

                            monthNames.forEach {t, u ->
                                    result = result.substring(0).replace(t, u)
                            }
                                Text(
                                    text = result
                                )
→ Ссылка