Формат месяца месяца в строку из 3 первых букв - Kotlin - PullRequest
0 голосов
/ 19 мая 2019

У меня есть эта дата "08/08/2019", и я хочу, чтобы она выглядела так: "08, август 2019", я пытался использовать when, но задавался вопросом, есть ли более простой способ сделать это?Я знаю, что это небольшой вопрос, но я попытался найти ответ через Интернет, но не смог найти его.

Ответы [ 3 ]

3 голосов
/ 19 мая 2019

сначала вам нужно преобразовать строку в объект Date, а затем преобразовать ее в ваш формат, используя новый java.time

Update

val firstDate = "08/08/2019"
val formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy")
val date = formatter.parse(firstDate)
val desiredFormat = DateTimeFormatter.ofPattern("dd, MMM yyyy").format(date)
println(desiredFormat) //08, Aug 2019

старый ответ

val firstDate = "08/08/2019"
val formatter = SimpleDateFormat("dd/MM/yyyy")
val date = formatter.parse(firstDate)
val desiredFormat = SimpleDateFormat("dd, MMM yyyy").format(date)
println(desiredFormat) //08, Aug 2019
1 голос
/ 20 мая 2019

Используйте предопределенные локализованные форматы и java.time

    Locale englishIsrael = Locale.forLanguageTag("en-IL");
    DateTimeFormatter shortDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
            .withLocale(englishIsrael);
    DateTimeFormatter mediumDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
            .withLocale(englishIsrael);

    String dateStringWeHave = "08/08/2019";
    LocalDate date = LocalDate.parse(dateStringWeHave, shortDateFormatter);
    String dateStringWeWant = date.format(mediumDateFormatter);
    System.out.println(dateStringWeWant);

Извините за синтаксис Java, я надеюсь, что вы переведете. Выход:

8 августа 2019

Это не совсем то, что вы просили. Тем не менее, у Java обычно есть хорошее представление о том, какой формат ожидают люди во всем мире, поэтому мое первое предложение - подумать над тем, чтобы согласиться с этим (откровенно 08 и запятая также выглядит немного странно для меня, но что я знаю?)

Другая особенность, которую демонстрирует фрагмент кода, - это использование LocalDate и DateTimeFormatter из java.time, современного Java-API даты и времени. Я настоятельно рекомендую java.time для устаревших классов даты и времени, таких как Date и, в частности, SimpleDateFormat. Они были плохо спроектированы. Была причина, по которой их заменили.

Если ваши пользователи говорят, что они абсолютно хотят 08, Aug 2019, вам нужно указать это через строку шаблона формата:

    DateTimeFormatter handBuiltFormatter = DateTimeFormatter.ofPattern("dd, MMM uuuu", englishIsrael);
    String dateStringWeWant = date.format(handBuiltFormatter);

Теперь мы получаем именно тот результат, который вы запрашивали:

08, август 2019

Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time, современный Java-интерфейс даты и времени.

0 голосов
/ 19 мая 2019

Вы можете использовать класс Java SimpleDataFormat:

import java.text.SimpleDateFormat

Где-то в вашем коде:

val myDateStr = "08/08/2019"
val parsedDateObj = SimpleDateFromat("dd/MM/yyyy").parse(myDateStr)
val formattedDateStr = SimpleDateFormat("dd, MMM yyyy").format(parsedDateObj) // "08, Aug 2019"
...