我正在尝试将月份名称作为字符串返回,例如“May”,“September”,“November”。
我试过了:
int month = c.get(Calendar.MONTH);
然而,这会返回整数(分别为5,9,11)。我怎样才能获得月份名称?
答案 0 :(得分:143)
使用此:
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());
答案 1 :(得分:90)
为了在字符串变量中获取月份,请使用以下代码
例如9月:
M - > 9
MM - > 09
MMM - >月
String monthname=(String)android.text.format.DateFormat.format("MMMM", new Date())
答案 2 :(得分:83)
对于早期API的使用String.format(Locale.US,"%tB",c);
答案 3 :(得分:37)
“MMMM”绝对不是正确的解决方案(即使它适用于多种语言),使用“{LLLL”模式与SimpleDateFormat
支持“L”作为独立月份名称的ICU兼容扩展程序已添加到Jun. 2010上的Android平台。
即使用英语,'MMMM'和'LLLL'的编码也没有区别,你也应该考虑其他语言。
E.g。这是你得到的,如果你使用Calendar.getDisplayName
或1月的“MMMM”模式与俄语Locale
:
января(这对于完整的日期字符串是正确的:“10января,2014 ”)
但是如果您想要一个独立的月份名称:
<强>январь强>
正确的解决方案是:
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
如果您对所有翻译的来源感兴趣 - here is the reference到格里高利历日历翻译(页面顶部链接的其他日历)。
答案 4 :(得分:15)
这很简单
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
答案 5 :(得分:9)
我保留这个对其他案例有用的答案,但@trutheality答案似乎是最简单直接的方法。
您可以使用DateFormatSymbols
DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example
答案 6 :(得分:3)
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);
}
在API 15-25上测试
可能的输出Май,但不是Мая
答案 7 :(得分:2)
我建议使用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
答案 8 :(得分:2)
俄语。
Month
.MAY
.getDisplayName(
TextStyle.FULL_STANDALONE ,
new Locale( "ru" , "RU" )
)
май
美国英语。
Month
.MAY
.getDisplayName(
TextStyle.FULL_STANDALONE ,
Locale.US
)
五月
请参阅此code run live at IdeOne.com。
这是现代答案。在2011年提出此问题时,Calendar
和GregorianCalendar
通常用于日期和时间,尽管它们的设计总是很差。那是8年前了,那些课程早已过时了。假设您尚未达到API级别26,我的建议是使用ThreeTenABP库,该库包含Android改编的java.time反向端口,即现代的Java日期和时间API。 java.time更好用。
根据您的确切需求和情况,有两种选择:
Month
及其getDisplayName
方法。DateTimeFormatter
。 Locale desiredLanguage = Locale.ENGLISH;
Month m = Month.MAY;
String monthName = m.getDisplayName(TextStyle.FULL, desiredLanguage);
System.out.println(monthName);
此代码段的输出为:
五月
在某些语言中,无论您使用TextStyle.FULL
还是TextStyle.FULL_STANDALONE
都会有所不同。您将不得不查看,或者与您的用户一起检查,这两种方法中哪一种适合您的上下文。
如果您有日期,则可以选择DateTimeFormatter
。例如:
DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM", desiredLanguage);
ZonedDateTime dateTime = ZonedDateTime.of(2019, 5, 31, 23, 49, 51, 0, ZoneId.of("America/Araguaina"));
String monthName = dateTime.format(monthFormatter);
我正在展示ZonedDateTime
的用法,它是旧Calendar
类的最接近的替代品。上面的代码也适用于LocalDate
,LocalDateTime
,MonthDay
,OffsetDateTime
和YearMonth
。
如果您从尚未升级到java.time的旧版API中获得了Calendar
,该怎么办?转换为ZonedDateTime
并按上述步骤进行:
Calendar c = getCalendarFromLegacyApi();
ZonedDateTime dateTime = DateTimeUtils.toZonedDateTime(c);
其余与以前相同。
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 9 :(得分:0)
获得一个独立的月份名称令人惊讶地难以执行&#34;对&#34;在Java中。 (至少在撰写本文时。我目前正在使用Java 8)。
问题是在某些语言中,包括俄语和捷克语,月份名称的独立版本与&#34;格式化&#34;不同。版。此外,似乎没有任何一个Java API能够为您提供最好的&#34;串。到目前为止,此处发布的大多数答案仅提供格式化版本。下面粘贴的是一个工作解决方案,用于获取单个月名称的独立版本,或获取包含所有这些名称的数组。
我希望这能节省一些时间!
/**
* 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;
}
答案 10 :(得分:0)
获取日期和时间的示例方法 这种格式“ 2018 Nov 01 16:18:22”使用此
DateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
Date date = new Date();
dateFormat.format(date);