6

私はこの方法で日付をフォーマットしようとしています:

Monday 4, November, 2013

これは私のコードです:

private static String formatDate(Date date) {
  Calendar calenDate = Calendar.getInstance();
  calenDate.setTime(date);
  Calendar today = Calendar.getInstance();
  if (calenDate.get(Calendar.DAY_OF_MONTH) == today.get(Calendar.DAY_OF_MONTH)) {
    return "Today";
  }
  today.roll(Calendar.DAY_OF_MONTH, -1);
  if (calenDate.get(Calendar.DAY_OF_MONTH) == today.get(Calendar.DAY_OF_MONTH)) {
    return "Yesterday";
  }
  // Guess what buddy
  SimpleDateFormat sdf = new SimpleDateFormat("EEEEE d, MMMMM, yyyy");
  // This prints "monday 4, november, 2013" ALL in lowercase
  return sdf.format(date);
}

splitしかし、私は何らかの方法を使用したり、そのようなことをしたくありません。各単語の先頭を大文字にするために正規表現に含めることができるパターンはありませんか?

更新 私はヒスパニック系の国から来ましたnew Locale("es", "ES").「Martes 7、Noviembre、2013」が必要な場合、「Martes 7、Noviembre、2013」を取得するようなものです。

4

2 に答える 2

7

SimpleDateFormat使用する文字列を設定することで、出力する文字列を変更できDateFormatSymbolsます。公式チュートリアルには、この例が含まれています: http://docs.oracle.com/javase/tutorial/i18n/format/dateFormatSymbols.html

「短い平日」に適用されるチュートリアルの例の再現:

String[] capitalDays = {
    "", "SUN", "MON",
    "TUE", "WED", "THU",
    "FRI", "SAT"
};
symbols = new DateFormatSymbols( new Locale("en", "US"));
symbols.setShortWeekdays(capitalDays);

formatter = new SimpleDateFormat("E", symbols);
result = formatter.format(new Date());
System.out.println("Today's day of the week: " + result);
于 2013-11-07T13:22:37.337 に答える
1

を使用するLocale.USと、正常に動作します。

SimpleDateFormat sdf = new SimpleDateFormat("EEEEE d, MMMMM, yyyy", Locale.US);
System.out.println(sdf.format(Date.valueOf("2013-11-07")));

出力:

Thursday 7, November, 2013
于 2013-11-07T13:22:27.043 に答える