Joda DateTimeFormat с соответствующим суффиксом числа

Мне нужно напечатать DateTime в форме, например, Wednesday, January 9th , где день месяца автоматически получает соответствующий суффикс, например. 2 января будет 2 января . Как я могу получить DateTimeFormatter , который делает это?

3
nl ja de
Невозможно, насколько я вижу, кроме как с помощью специальной разработки, может быть, вам следует открыть запрос функции?
добавлено автор fge, источник
Насколько мне известно, это невозможно. Хотя я считаю, что это так.
добавлено автор Khoa Nghiem, источник

3 ответы

В Joda нет поддержки, но с некоторыми ограничениями вы можете использовать библиотеку ICU , поскольку он включает в себя локализованные правила форматирования порядковых номеров:

import com.ibm.icu.text.RuleBasedNumberFormat;
import com.ibm.icu.text.SimpleDateFormat;

...

SimpleDateFormat sdf = 
    new SimpleDateFormat("EEEE, MMMM d", Locale.ENGLISH);

sdf.setNumberFormat(
    new RuleBasedNumberFormat(
        Locale.ENGLISH, RuleBasedNumberFormat.ORDINAL));

System.out.println(sdf.format(new Date()));

Обратите внимание, что вы можете указать только один экземпляр NumberFormat для экземпляра SimpleDateFormat, так что этот подход работает только в том случае, если «день месяца» является единственным числом в шаблоне даты. Добавление «yyyy» к шаблону даты будет, например, отформатируйте год как «2 013th».

Интерфейс ICU взаимодействует с классами Date и Calendar из стандартного API, поэтому, если вам действительно нужно использовать Joda, вам нужно будет создать java.util.Date из вашего экземпляра Joda DateTime.

4
добавлено
Хороший ответ. Я на самом деле собираюсь просто реализовать логику, хотя, поскольку мне нужен только месяц отформатированного месяца.
добавлено автор LuxuryMode, источник
Да, возможно, я добавил, что если вам не нужны какие-либо другие функции ICU, вероятно, лучше написать несколько строк кода, чтобы сделать это самостоятельно, вместо добавления библиотеки ICU 9 МБ :)
добавлено автор jarnbjo, источник

В Джоде, для простого получения надлежащего суффикса в день месяца, должно быть достаточно простого, как и следующее:

        String dayOfMonth = now.dayOfMonth().getAsText();

        String suffix = "";
        if(dayOfMonth.endsWith("1")) suffix = "st";
        if(dayOfMonth.endsWith("2")) suffix = "nd";
        if(dayOfMonth.endsWith("3")) suffix= "rd";
        if(dayOfMonth.endsWith("0") || dayOfMonth.endsWith("4") || dayOfMonth.endsWith("5") || dayOfMonth.endsWith("6")
                || dayOfMonth.endsWith("7") || dayOfMonth.endsWith("8") || dayOfMonth.endsWith("9")) suffix = "th";
1
добавлено
Исправлена ​​ошибка, в которой 11,12,13 было бы неправильно.
добавлено автор John Hamelink, источник
@jarnbjo, хорошая добыча!
добавлено автор LuxuryMode, источник
Это не сработало бы для 10, 11, 12, 13, 20 и 30-го.
добавлено автор jarnbjo, источник
Если вы просто хотите, чтобы простой java-метод добавлял суффиксы без недостающих ссылок, упомянутых выше, это решение может быть тем, что вы ищете
добавлено автор Grant, источник

Мне не нравится решение использовать другую библиотеку, поэтому я решаю это, используя регулярное выражение для предварительной обработки строки и удаления порядкового суффикса

val dateString1 = "6th December 2016"
dateString1.replaceFirst("^(\\d+).*? (\\w+ \\d+)", "$1 $2")
val dtf = DateTimeFormat.forPattern("dd MMMM yyyy").withLocale(Locale.ENGLISH)
val d1 = dtf.parseLocalDate(cured)

now d1 should be d1: org.joda.time.LocalDate = 2016-12-06

0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async