Конверт даты из паттерна "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 шт):
Пока только такой вариант, и он мне не нравится. Пожалуйста, поделитесь более адекватным решением, если оно у вас есть.
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
)