如何从日历中获取月份名称

时间:2013-02-12 12:04:05

标签: java calendar

当我们知道int monthNumber = calendar.get(Calendar.MONTH)时,是否有一个oneliner来获取当月的名字?或者最简单的方法是什么?

21 个答案:

答案 0 :(得分:163)

您可以使用 SimpleDateFormat 来实现它,这是为了格式化日期和时间。

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));

答案 1 :(得分:86)

你也会这样。

  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;
    }

答案 2 :(得分:67)

这很简单

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

答案 3 :(得分:40)

这是我为课堂项目提出的解决方案:

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来电。

答案 4 :(得分:32)

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

这是一个在特定国家/地区显示英语,法语,阿拉伯语和阿拉伯语的月份名称的示例,例如&#34;叙利亚&#34;:

    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

答案 5 :(得分:14)

SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

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

如果您使用getDisplayNameCalendar中的DateFormatSymbols作为1月份,则可获得以下内容:

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

但是如果您想要一个独立的月份名称:

<强>январь

答案 6 :(得分:10)

约达时间

如何使用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 );

答案 7 :(得分:9)

Month::getDisplayName

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

通过:

  • 一个TextStyle来确定缩写的长度或缩短程度。
  • A Locale用于指定翻译中使用的人类语言,以及用于缩写,标点符号等的文化规范。

示例:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}

答案 8 :(得分:7)

这可能是一个老问题,但是当我们知道指数的时候,作为一个单位来获取当月的名字,我用了

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

或短名称

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

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

答案 9 :(得分:3)

此代码具有语言支持。 我在Android App中使用过它们。

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

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...

答案 10 :(得分: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);

答案 11 :(得分:2)

一种方式:

我们有Month Java API(java.time.Month)。我们可以使用Month.of(month);

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

第二种方式:

ZonedDateTime.now().getMonth();

这在java.time.ZonedDateTime中可用。

答案 12 :(得分:2)

你可以这样得到一行: String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]

答案 13 :(得分:1)

Calender cal = Calendar.getInstance(Locale.ENGLISH)
String[] mons = new DateFormatSymbols(Locale.ENGLISH).getShortMonths();
int m = cal.get(Calendar.MONTH);
String mName = mons[m];

答案 14 :(得分: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]
}

答案 15 :(得分:0)

最简单的方法

import java.text.DateFormatSymbols;

int month = 3; // March
System.out.println(new DateFormatSymbols().getMonths()[month-1]);

答案 16 :(得分:0)

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

private void getCalendarMonth(Date date) {      
    Calendar 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));
}

答案 17 :(得分:0)

这对我有用

        import java.text.SimpleDateFormat;
        import java.util.Calendar;


        Calendar cal = Calendar.getInstance();
        String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());

答案 18 :(得分:0)

它返回月份的英文名称。 04返回APRIL,依此类推。

String englishMonth (int month){
        return Month.of(month);
    }

答案 19 :(得分:0)

DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));

答案 20 :(得分:-3)

来自SimpleDateFormat java doc的

*         <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>