107

当我们知道时,是否有一个 oneliner 来获取月份名称:

int monthNumber  = calendar.get(Calendar.MONTH)

或者什么是最简单的方法?

4

22 回答 22

208

您可以使用 来实现它SimpleDateFormat,这意味着格式化日期和时间:

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
于 2013-02-12T12:05:43.027 回答
102
String getMonthForInt(int num) {
    String month = "wrong";
    DateFormatSymbols dfs = new DateFormatSymbols();
    String[] months = dfs.getMonths();
    if (num >= 0 && num <= 11) {
        month = months[num];
    }
    return month;
}
于 2013-02-12T12:09:15.020 回答
82

就这么简单

mCalendar = Calendar.getInstance();    
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
于 2014-04-24T10:42:43.903 回答
41

这是我为班级项目提出的解决方案:

public static String theMonth(int month){
    String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    return monthNames[month];
}

你传入的号码来自一个Calendar.MONTH电话。

于 2013-10-31T01:14:55.007 回答
37

如果您有多语言界面,您可以使用getDisplayName显示语言来控制显示月份的名称。

以下是在特定国家/地区(例如“叙利亚”)以英语、法语、阿拉伯语和阿拉伯语显示月份名称的示例:

Calendar c = Calendar.getInstance();
System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH ) );
System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.FRANCE ) );
System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar") ) );
System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar", "SY") ) );
System.out.println(c.getTime().toString());

结果是:

January
janvier
يناير
كانون الثاني
Sat Jan 17 19:31:30 EET 2015
于 2015-01-17T17:40:35.467 回答
17
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

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

getDisplayName如果您从CalendarDateFormatSymbols一月开始使用,这就是您得到的:

января(对于完整的日期字符串是正确的:“ 10 января, 2014 ”)

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

январь

于 2014-08-15T15:42:18.413 回答
12

乔达时间

使用Joda-Time怎么样。这是一个更好的日期时间 API (这里January指的是一月。它不像日历,它使用0-based数月的索引)。

您可以使用AbstractDateTime#toString( pattern )方法以指定格式格式化日期:

DateTime date = DateTime.now();
String month = date.toString("MMM");

月份名称来自数字

如果您想要特定月份编号的月份名称,您可以这样做:

int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");

本地化

上述方法使用您的 JVM 当前的默认语言环境作为月份名称的语言。您想指定一个 Locale 对象。

String month = date.toString( "MMM", Locale.CANADA_FRENCH );
于 2013-02-12T12:10:18.073 回答
11

Month::getDisplayName

从 Java 8 开始,使用Month枚举。该getDisplayName方法自动本地化月份的名称。

经过:

  • ATextStyle确定多长或多短。
  • ALocale指定翻译中使用的人类语言,以及用于缩写、标点符号等的文化规范。

例子:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}
于 2017-04-17T12:37:27.830 回答
10

这可能是一个老问题,但作为一个在我们知道索引时获得月份名称的单行程序,我使用了

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];

或简称

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];

请注意,您monthNumber从 1 开始计数,而上述任何方法都返回一个数组,因此您需要从 0 开始计数。

于 2017-01-25T14:14:42.773 回答
4

此代码具有语言支持。我曾在 Android 应用程序中使用过它们。

String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,... 

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
于 2017-12-05T09:03:12.723 回答
3

我发现这更容易(https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html

private void getCalendarMonth(Date date) {      
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    Month month = Month.of(calendar.get(Calendar.MONTH));       
    Locale locale = Locale.getDefault();
    System.out.println(month.getDisplayName(TextStyle.FULL, locale));
    System.out.println(month.getDisplayName(TextStyle.NARROW, locale));
    System.out.println(month.getDisplayName(TextStyle.SHORT, locale));
}
于 2019-05-07T07:24:20.887 回答
2

你可以像这样得到它:

String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]
于 2015-04-08T21:56:00.583 回答
2

这对我有用:

String getMonthName(int monthNumber) {
    String[] months = new DateFormatSymbols().getMonths();
    int n = monthNumber-1;
    return (n >= 0 && n <= 11) ? months[n] : "wrong number";
}

"September"用一行返回:

String month = getMonthName(9);
于 2016-09-12T20:09:49.173 回答
2

单程:

我们有MonthJava 中的 API ( java.time.Month)。我们可以通过使用Month.of(month);

在这里,它们Month被索引为数字,因此您可以提供Month.JANUARY或在上述 API 中提供索引,例如 1、2、3、4。

第二种方式:

ZonedDateTime.now().getMonth();

这在java.time.ZonedDateTime.

于 2018-11-12T09:30:05.517 回答
2
Calender cal = Calendar.getInstance(Locale.ENGLISH)
String[] mons = new DateFormatSymbols(Locale.ENGLISH).getShortMonths();
int m = cal.get(Calendar.MONTH);
String mName = mons[m];
于 2020-12-09T15:33:11.373 回答
2

最简单的方法

import java.text.DateFormatSymbols;

int month = 3; // March
System.out.println(new DateFormatSymbols().getMonths()[month-1]);
于 2021-06-09T16:37:37.923 回答
1

它返回月份的英文名称。04 返回 APRIL 等等。

String englishMonth (int month){
        return Month.of(month);
    }
于 2018-06-28T10:30:38.647 回答
1

我根据本主题中的响应创建了一个 Kotlin 扩展,并使用DateFormatSymbols您获得本地化响应的答案。

fun Date.toCalendar(): Calendar {
    val calendar = Calendar.getInstance()
    calendar.time = this
    return calendar
}


fun Date.getMonthName(): String {
    val month = toCalendar()[Calendar.MONTH]
    val dfs = DateFormatSymbols()
    val months = dfs.months
    return months[month]
}
于 2019-01-10T13:56:24.530 回答
1
import java.text.SimpleDateFormat;
import java.util.Calendar;


Calendar cal = Calendar.getInstance();
String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());
于 2019-03-19T12:48:36.743 回答
0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
于 2016-10-10T06:16:44.383 回答
0

对于月份的全名:

val calendar = Calendar.getInstance()
calendar.timeInMillis = date
return calendar.getDisplayName(Calendar.MONTH, Calendar.Long, Locale.ENGLISH)!!.toString()

而对于月份的简称:

val calendar = Calendar.getInstance()
calendar.timeInMillis = date
return calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.ENGLISH)!!.toString()
于 2021-09-28T09:30:07.703 回答
-3

来自 SimpleDateFormat java 文档:

*         <td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>
 *         <td><code>02001.July.04 AD 12:08 PM</code>
 *         <td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>
 *         <td><code>Wed, 4 Jul 2001 12:08:56 -0700</code>
于 2016-10-31T04:01:47.190 回答