3

DateTimeたとえば、の形式でaを印刷する必要がありますWednesday, January 9th。ここで、月の日には自動的に適切なサフィックスが付けられます。たとえば、1月2日はですJanuary 2nd。どうすればDateTimeFormatterこれを行うことができますか?

4

3 に答える 3

4

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()));

SimpleDateFormatインスタンスに指定できるNumberFormatインスタンスは1つだけであるため、このアプローチは、「月の日」が日付パターンの唯一の数値である場合にのみ機能することに注意してください。日付パターンに「yyyy」を追加すると、たとえば、年が「2,013th」としてフォーマットされます。

ICUクラスは標準APIのDateクラスおよびCalendarクラスとインターフェイスするため、最初にJodaを実際に使用する必要がある場合は、JodaDateTimeインスタンスからjava.util.Dateを作成する必要があります。

于 2013-01-09T16:05:04.617 に答える
1

Jodaでは、月の日の適切なサフィックスを取得するには、次のような単純なもので十分です。

        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";
于 2013-01-09T16:29:42.387 に答える
0

別のライブラリを使用するソリューションが気に入らないので、正規表現を使用して文字列を前処理し、序数のサフィックスを削除してこれを解決します

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)

今d1はd1: org.joda.time.LocalDate = 2016-12-06

于 2017-05-02T14:08:44.633 に答える