月份名称作为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; }