5

さまざまなロケールをサポートする Java アプリケーションを構築していますが、、 、、およびDateFormat オプションDateFormatの間で利用可能なものを超えて表示をカスタマイズしたいと考えています。少なくとも英語の場合は、日付と時刻のコンポーネントの間に文字を配置したり、AM/PM を小文字にしたりしたいと考えています。FULLLONGMEDIUMSHORTDateFormat.getDateTimeFormat()

それを行うには3つの方法を考えることができます:

1) ロケールが英語の場合、new SimpleDateFormatオブジェクトでカスタム フォーマット文字列を使用します。

2) 既存のロケールのデフォルトのフォーマット文字列を変更します

3) 必要な書式文字列を指定する新しいロケール バリアントを作成する

2 または 3 を実行する方法がわかりません (またはそれが可能である場合)、1 を実行したくない... 誰かが以前にこのようなことをしたことがありますか?

また、AM/PM を小文字にするには 2 または 3 が必要になるようです。(ロケールの dateformat 設定に AmPmMarkers リソースを指定)

4

5 に答える 5

1

Java にはこのためのクラスがあり、それがResourceBundleクラスです。プロパティ ファイルでそれをバックアップすると、必要なものすべてに加えて、さらに多くのものを手に入れることができます。

ResourceBundle クラスがなくても、プロパティファイルを使用してすべての SimpleDateFormat 形式を保持できます。

Settings formats = new Settings();
Properties SDFFormats = formats.load(propertiesFile);

String SDFAmerica = SDFFormats.getProperty("FormatAmerica");

プロパティファイルへのエントリは

FormatAmerica = MMM-dd-yyyy
于 2008-10-23T17:32:06.717 に答える
1

代わりに MessageFormat を使用しないのはなぜですか?

"{0,date,short} your text here {0,time,short}" というパターンを使用して、必要なことを行います。

于 2008-10-21T23:53:45.463 に答える
0

日付の書式設定にはJodaTimeを使用することをお勧めします。強力でありながらエレガントなフォーマットの柔軟性があります。あなたはおそらく、そのフォーマッターがあなたがやりたいことを非常に簡単にすることに気付くでしょう。

ところで:一度Jodaに行くと、二度と戻らないでしょう!

于 2008-10-23T09:19:37.257 に答える
0

これを解決する最も満足のいく方法は、ロケール固有のリソース バンドルから文字列 am,pm,formatString をロードしてから、次のようにすることです。

SimpleDateFormat sdf = (SimpleDateFormat)sdf.getDateTimeInstance(DateTime.SHORT,DateTime.SHORT, locale);
if (formatString != null) {
    sdf = new SimpleDateFormat(formatString);
}
if (am!= null && pm != null) {
    DateFormatSymbols symbols = sdf.getDateFormatSymbols();
    symbols.setAmPmStrings(new String[]{am, pm});
    sdf.setDateFormatSymbols(symbols);
}

ポール: DateFormatSymbols に区切り文字があるかどうかはわかりませんが、おそらく str.replace を保持する必要があります。

于 2008-10-22T15:55:13.603 に答える
0

私が対処した唯一の類似点は、「strftime」と「locale」では、イタリア語では時間フィールド間にコロンを使用する必要があると書かれていますが、Java ではそれらの間にピリオドを配置するという事実です。そこで、次のコードを追加しました。

  // This is an incredibly ugly hack, but it's based on the fact that
  // Java for some reason decided that Italy uses "." between
  // hours.minutes.seconds, even though "locale" and strftime say
  // something different.
      hmsTimeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
      if (hmsTimeFormat instanceof SimpleDateFormat)
      {
        String str = ((SimpleDateFormat)hmsTimeFormat).toPattern();
        str = str.replace('.', ':');
        hmsTimeFormat = new SimpleDateFormat(str);
      }
于 2008-10-21T20:19:36.567 に答える