如何从日历获取月份名称


Answers:


99

您也将获得这种方式。

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

6
执行的DateFormatSymbols在JDK 8改变,所以getMonths方法并不适用于所有语言环境的再返回正确的值:oracle.com/technetwork/java/javase/...
ahaaman

1
您能为JDK8提供解决方法/工作解决方案吗?
多米尼克2014年

您什么时候可以获得一个月的电话号码?
米奇·佩尔斯坦

米奇(Mickey)回答您的问题,这是如何将month用作int并使用它-public static void main(String [] args){int month; GregorianCalendar date = new GregorianCalendar(); month = date.get(Calendar.MONTH); System.out.println(“当前月份为” +(月份+ 1)+“,月份名称为” + getMonthForInt(month));}静态字符串getMonthForInt(int num){字符串month =“ wrong”; DateFormatSymbols dfs =新的DateFormatSymbols(); String []月= dfs.getMonths(); if(num> = 0 && num <= 11){month = months [num]; }返回月份;}
Ajay Kumar

192

您可以使用SimpleDateFormat实现此目的,该格式用于格式化日期和时间。

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

这将起作用,但是我想获取字符串repr。我知道该月的指数。我想我会使用其他方法,谢谢。
ogzd

47
这有助于我获得当前月份的名称。尽管我使用(“ MMMM”)来获取完整的月份名称,而不是简称。
speedynomads 2013年

77

就这么简单

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

4
我认为,使用日历抽象是最优雅的解决方案。+1
sebastian 2015年

2
错误!问题将出在带有案例的语言中。例如,在斯拉夫语区域设置中,以格形式返回月份,例如,在ru-RU语言环境中返回10月份,октября而不是Октябрь您可能期望的。
尼克·西基里尔

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


2
这对我很有用new SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani

这是一个微弱的解决方案,如何解决1月,2月等问题,而不是除了1月,2月等问题。这不会涵盖所有情况
Abeer zaroor

2
好吧,您应该在月份中加1。数组从0开始
。– RoccoDev

这不好,您是在重新发明Java吗?
米奇·佩尔斯坦

1
这适用于说英语的用户。那其他人呢?
Advait S

33

如果您具有多语言界面,则可以使用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

这是哪个Java版本?
穆罕默德·盖尔巴纳

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

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

如果getDisplayName从1月的Calendar或中使用,这就是您得到的DateFormatSymbols

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

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

январь


是RU语言环境的正确答案。很奇怪,Android SDK不包含“ LLLL”规范。
Anfet

12

乔达时代

如何使用Joda-Time。它是一种更好的日期时间API(January在这里意味着一月。它不像Calendar,它使用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作为月份名称的语言。您想改为指定一个Locale对象。

String month = date.toString( "MMM", Locale.CANADA_FRENCH );

1
谢谢,但是我对我的老SimpleDateFormatDate
ogzd 2013年

@ogzd。你的愿望。但是您一定要尝试一下,我敢打赌,您一定会喜欢唱歌的。
Rohit Jain

@ogzd。我发布了从月份号获取月份名称的方法。顺便说一句,你为什么要这么做?
Rohit Jain

10

Month::getDisplayName

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

通过:

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

例:

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

9

这可能是一个古老的问题,但是当我们知道索引时,作为一个衬里来获取月份的名称,我使用了

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

或简称

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

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


3

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

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

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

1
这完美的作品,评论都只是一点点完全错误的,虽然
ИвоНедев

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

是不是Month从1月= 1开始索引,而Calendar从1月= 0开始?一月份不会Month.of(calendar.get(Calendar.MONTH));失败吗?
MCO

2

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


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

2

单程:

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

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

第二种方式:

ZonedDateTime.now().getMonth();

在中可用java.time.ZonedDateTime


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

1

这对我有用

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


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

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

1
尽管您的答案可能是正确的,但质量很差。请详细说明为什么这个答案是正确的。
SubliemeSiem

1
@SubliemeSiem我只是想更改格式和最简单的方法来完成它:MM-它将以01、02、03等整数形式返回月份名称。MMM-它将以jan,feb,mar的形式返回月份名称。MMMM-它将以字符串格式返回完整的月份名称,如January。
阿米特·米什拉

这是格式化日期的唯一正确答案。使用日期或日历对象,并使用格式化程序对其进行格式化。问题本身就是
米奇·佩尔斯坦

0

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

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

简单直接的建议,谢谢。您的代码无法编译。您必须声明返回类型MonthtoString在返回结果之前应用结果。
Ole VV

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

我看不出如何回答这个问题。
jhpg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.