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

ogz*_*gzd 87 java calendar

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

Per*_*ror 176

你可以使用SimpleDateFormat实现它,它用于格式化日期和时间.

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
Run Code Online (Sandbox Code Playgroud)

  • 这帮我获得了当月的名字.虽然我使用("MMMM")来获取完整的月份名称而不是缩短的名称. (37认同)
  • 这会起作用,但我想获得字符串 repr。当我知道它的索引时的月份。我想我会使用其他方法,谢谢。 (2认同)

sub*_*odh 90

你也会这样.

  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;
    }
Run Code Online (Sandbox Code Playgroud)

  • 在JDK 8中更改了DateFormatSymbols实现,因此getMonths方法不再为所有Locale返回正确的值:http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html (6认同)

san*_*one 72

就这么简单

mCalendar = Calendar.getInstance();    
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,使用Calendar抽象是最优雅的解决方案.+1 (3认同)
  • 错误!问题将出在带有案例的语言中。例如,在斯拉夫语系语言环境中,按属世情况将返回月份,例如,在ru-RU语言环境中的10月,您将收到“октября”而不是您可能期望的“Октябрь”。 (2认同)

Ter*_*ern 40

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

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

您传递的号码来自Calendar.MONTH通话.

  • 这对我来说很有用'new SimpleDateFormat("MMMM").format(cal.getTime());` (2认同)
  • 嗯,你应该给这个月加 1。数组从 0 开始。 (2认同)
  • 这适用于说英语的用户。其他人呢? (2认同)

Eng*_*r T 32

如果您有多语言界面,则可以使用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());
Run Code Online (Sandbox Code Playgroud)

结果是:

  January
  janvier
  ?????
  ????? ??????
  Sat Jan 17 19:31:30 EET 2015
Run Code Online (Sandbox Code Playgroud)


art*_*nig 15

SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
Run Code Online (Sandbox Code Playgroud)

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

这是你会得到什么,如果你使用getDisplayName来自CalendarDateFormatSymbols一月:

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

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

январь


Roh*_*ain 11

乔达时间

如何使用Joda-Time.这是一个更好的日期时间API(并且January在这里意味着一月.它不像日历,它使用0-based索引数月).

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

DateTime date = DateTime.now();
String month = date.toString("MMM");
Run Code Online (Sandbox Code Playgroud)

月份名称从数字

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

int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");
Run Code Online (Sandbox Code Playgroud)

本土化

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

String month = date.toString( "MMM", Locale.CANADA_FRENCH );
Run Code Online (Sandbox Code Playgroud)


小智 10

Month::getDisplayName

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

通过:

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

例:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}
Run Code Online (Sandbox Code Playgroud)


geo*_*ger 8

这可能是一个古老的问题,但是当我们知道指数的时候,作为一个获得月份名称的班轮,我用了

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];
Run Code Online (Sandbox Code Playgroud)

或短名称

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];
Run Code Online (Sandbox Code Playgroud)

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