Я пытаюсь показать долгие месяцы. Но месяц печатается на английском языке. Это необходимо для работы с Android API 19 и выше.
compile 'joda-time:joda-time:2.9.9' val test = DateTime() val l = Locale("nl_NL") // Dutch language, Netherlands country. val f = DateTimeFormat.forPattern("dd MMM yyyy").withLocale(l) val text = f.print(test)
Распечатывает:
26 октября 2017 г.
Должно быть:
26 октября 2017 года
Вы должны использовать конструктор 2-arg Locale
, который получает код языка и страны в отдельных параметрах:
val l = Locale("nl", "NL")
При этом вывод:
26 окт 2017 г.
В моих тестах вывод не в верхнем регистре Okt
как вы хотели, но он встроен в API, и мы не контролируем его. Если вы хотите, чтобы Okt
выходным, вам придется самостоятельно управлять строкой.
Правильный ответ:
val l = Locale("nl", "NL") val f = DateTimeFormat.forPattern("dd MMM yyyy").withLocale(l) val dateStr = f.print(dateTime).substring(3, 4).toUpperCase() val capitalizedDate = StringBuilder(f.print(dateTime)) capitalizedDate.setCharAt(3, dateStr[0]) return capitalizedDate.toString().replace(".", "")
Я уже ответил на аналогичный вопрос. Вы можете получить локализованное имя месяца с использованием объекта Calendar
.
private String getMonthName(final int index, final Locale locale, final boolean shortName) { String format = "%tB"; if (shortName) format = "%tb"; Calendar calendar = Calendar.getInstance(locale); calendar.set(Calendar.MONTH, index); calendar.set(Calendar.DAY_OF_MONTH, 1); return String.format(locale, format, calendar); }
Пример полного имени месяца:
System.out.println(getMonthName(0, new Locale("NL"), false));
Результат: januari
Пример для короткого месяца:
System.out.println(getMonthName(2, new Locale("NL"), true));
Результат: jan.