月份名称作为string

我试图返回一个string的月份的名称,例如“五月”,“九月”,“十一月”。

我试过了:

int month = c.get(Calendar.MONTH); 

但是,这将返回整数(分别为5,9,11)。 我怎样才能得到月份的名字?

使用getDisplayName 。

对于较早的API使用String.format(Locale.US,"%tB",c);

用这个 :

 Calendar cal=Calendar.getInstance(); SimpleDateFormat month_date = new SimpleDateFormat("MMMM"); String month_name = month_date.format(cal.getTime()); 

月份名称将包含完整的月份名称,如果您想要简短的月份名称,请使用此名称

  SimpleDateFormat month_date = new SimpleDateFormat("MMM"); String month_name = month_date.format(cal.getTime()); 

获取stringvariables的月份,请使用下面的代码

例如九月份:

M – > 9

MM – > 09

MMM – > 9月

MMMM – >九月

 String monthname=(String)android.text.format.DateFormat.format("MMMM", new Date()) 
 SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() ); dateFormat.format( date ); 

对于某些语言(例如俄语),这是获取独立月份名称的唯一正确方法。

如果您使用Calendar DateFormatSymbols或1月份的DateFormatSymbols ,那么这就是您所得到的:

января (对于完整的datestring是正确的:“ 2014年10月10日 ”)

但是如果是独立的月份名称,您会期望:

январь

像这样简单

 mCalendar = Calendar.getInstance(); String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault()); 

我保留这个答案,这对其他情况是有用的,但@三位一体的答案似乎是最简单和直接的方式。

您可以使用DateFormatSymbols

 DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example 

进入API的问题,所以我只是做了我自己的:

 public static String getDate(){ Time today = new Time(Time.getCurrentTimezone()); today.setToNow(); System.out.println(today.month); return today.monthDay+", "+ getMonthName(today.month) +" "+today.year; } public static String getMonthName(int month){ switch(month+1){ case 1: return "Jan"; case 2: return "Feb"; case 3: return "Mar"; case 4: return "Apr"; case 5: return "May"; case 6: return "Jun"; case 7: return "Jul"; case 8: return "Aug"; case 9: return "Sep"; case 10: return "Oct"; case 11: return "Nov"; case 12: return "Dec"; } return ""; } 

Android上的唯一方法是获得格式正确的stanalone月份名称,如乌克兰语,俄语,捷克语

 private String getMonthName(Calendar calendar, boolean short) { int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY | DateUtils.FORMAT_NO_YEAR; if (short) { flags |= DateUtils.FORMAT_ABBREV_MONTH; } return DateUtils.formatDateTime(getContext(), calendar.getTimeInMillis(), flags); } 

testingAPI 15-25

五月的产量是Май,但不是Мая

我build议使用Calendar对象和Locale因为对于不同的语言,月份名称是不同的:

 // index can be 0 - 11 private String getMonthName(final int index, final Locale locale, final boolean shortName) { String format = "%tB"; if (shortName) format = "%tb"; Calendar calendar = Calendar.getInstance(locale); calendar.set(Calendar.MONTH, index); calendar.set(Calendar.DAY_OF_MONTH, 1); return String.format(locale, format, calendar); } 

全月名称示例:

 System.out.println(getMonthName(0, Locale.US, false)); 

结果: January

短月份名称示例:

 System.out.println(getMonthName(0, Locale.US, true)); 

结果: Jan

获得独立的月份名称在Java中执行“正确”是非常困难的。 (至less在写这篇文章的时候,我正在使用Java 8)。

问题在于,在包括俄语和捷克语在内的某些语言中,月份名称的独立版本与“格式”版本不同。 另外,似乎没有一个Java API会给你“最好”的string。 到目前为止发布在这里的大多数答案只提供格式化版本。 下面的粘贴是获取单个月份名称的独立版本的工作解决scheme,或者获取所有这些数据的arrays。

我希望这会节省一些别人的时间!

 /** * getStandaloneMonthName, This returns a standalone month name for the specified month, in the * specified locale. In some languages, including Russian and Czech, the standalone version of * the month name is different from the version of the month name you would use as part of a * full date. (Different from the formatting version). * * This tries to get the standalone version first. If no mapping is found for a standalone * version (Presumably because the supplied language has no standalone version), then this will * return the formatting version of the month name. */ private static String getStandaloneMonthName(Month month, Locale locale, boolean capitalize) { // Attempt to get the standalone version of the month name. String monthName = month.getDisplayName(TextStyle.FULL_STANDALONE, locale); String monthNumber = "" + month.getValue(); // If no mapping was found, then get the formatting version of the month name. if (monthName.equals(monthNumber)) { DateFormatSymbols dateSymbols = DateFormatSymbols.getInstance(locale); monthName = dateSymbols.getMonths()[month.getValue()]; } // If needed, capitalize the month name. if ((capitalize) && (monthName != null) && (monthName.length() > 0)) { monthName = monthName.substring(0, 1).toUpperCase(locale) + monthName.substring(1); } return monthName; } /** * getStandaloneMonthNames, This returns an array with the standalone version of the full month * names. */ private static String[] getStandaloneMonthNames(Locale locale, boolean capitalize) { Month[] monthEnums = Month.values(); ArrayList<String> monthNamesArrayList = new ArrayList<>(); for (Month monthEnum : monthEnums) { monthNamesArrayList.add(getStandaloneMonthName(monthEnum, locale, capitalize)); } // Convert the arraylist to a string array, and return the array. String[] monthNames = monthNamesArrayList.toArray(new String[]{}); return monthNames; }