どのように私はJavaで、ロケールに正しい順序で日と月をフォーマットすることができますか?

skagedal:

ジャワ/ Kotlinにおけるロケールに正しい順序で、年(コンパクト形で)日と月をフォーマットする方法はありますが、ではありませんか?だから、英語のためには、「9月20日」であることが、スウェーデンのためにすべきである「9月20日」。

比較のために、ココアのプラットフォーム上で、私は(スウィフト)で、次の操作を行うことができます。

let formatter = DateFormatter()
formatter.locale = Locale(identifier: "sv_SE")
formatter.setLocalizedDateFormatFromTemplate("MMM d")
print(formatter.string(from: Date()))

これは、正しく物事を好転ます。JavaのSDKにして行うには同等のものはありますか?私は両方と様々な形しようとしてきたDateTimeFormatterし、古いSimpleTimeFormatAPIを、ない成功を。

注:とは異なり、この質問、私が年を含んでいる完全なメディアフォーマットを望んでいません。また、私はどちらかしたくないDateTimeFormatter.ofPattern("MMM d")ことは、スウェーデン語で間違った結果を与える、または以来、DateTimeFormatter.ofPattern("d MMM")それは英語で誤った結果を与えているので、。

オレVV:

いや、申し訳ありません。私は自動的にオンになりますなしのJavaライブラリを知っている"MMM d"に周りの20 sep.月の略語の前の月の日を好むロケール用。

あなたは、変更しようとするかもしれRowiで答えを、このように:

DateTimeFormatter ft = 
    DateTimeFormatter
    .ofLocalizedDate(FormatStyle.MEDIUM)
    .withLocale(Locale.forLanguageTag("sv-SE"))
;

しかし、結果は次のとおりです。

9月20日 2019

それはあなたが要求していない年が含まれています。

先進的なソリューションを使用しDateTimeFormatterBuilder構築するために、クラスをDateTimeFormatterオブジェクトを。

DateTimeFormatterBuilder
.getLocalizedDateTimePattern(
    FormatStyle.MEDIUM, 
    null, 
    IsoChronology.INSTANCE, 
    Locale.forLanguageTag("sv-SE")
)

これを返しますd MMM y削除するには、この文字列を変更しy、その前に、スペースを。他の言語にすることを注意yすることもyyyyyyあるいはu、文字列の最後に来ないかもしれません。に変更したフォーマットパターン文字列を渡しますDateTimeFormatter.ofPattern

これは、不安定かもしれません。あなたはすべての利用可能なロケールのフォーマットパターン文字列に目を通す場合でも、次のバージョンのCLDR(文字列から来た)、まだ驚きが含まれている場合があります。しかし、私はそれは私たちができる最善だと思います。それは私だったら、私はから文字列であることを検出することができた場合に例外をスロー検討したいgetLocalizedDateTimePattern私は修正する方法を知っているもののように見えません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=227594&siteId=1