如何用大写格式化日期?

时间:2013-11-07 13:17:00

标签: java date calendar formatting

我正在尝试以这种方式格式化日期:

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”​​。

2 个答案:

答案 0 :(得分:7)

您可以通过设置SimpleDateFormat使用的DateFormatSymbols来更改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); 输出的字符串。官方教程包括以下示例:http://docs.oracle.com/javase/tutorial/i18n/format/dateFormatSymbols.html

从教程中复制示例,应用于“短工作日”:

{{1}}

答案 1 :(得分: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