获取Java中的月份名称

时间:2009-12-31 05:53:16

标签: java calendar

我想以编程方式将1-12范围内的整数转换为相应的月份名称。 (例如1 - > 1月,2 - > 2月)等在一个语句中使用Java Calendar类。

注意:我想仅使用Java Calendar类来实现。不建议使用任何开关盒或字符串阵列解决方案。

感谢。

4 个答案:

答案 0 :(得分:7)

Calendar类不是在一个语句中获取本地化月份名称时使用的最佳类。

以下是仅使用int类获取Calendar值(1月为1)指定的所需月份的月份名称的示例:

// Month as a number.
int month = 1;

// Sets the Calendar instance to the desired month.
// The "-1" takes into account that Calendar counts months
// beginning from 0.
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, month - 1);

// This is to avoid the problem of having a day that is greater than the maximum of the
// month you set. c.getInstance() copies the whole current dateTime from system 
// including day, if you execute this on the 30th of any month and set the Month to 1 
// (February) getDisplayName will get you March as it automatically jumps to the next              
// Month
c.set(Calendar.DAY_OF_MONTH, 1);    

// Returns a String of the month name in the current locale.
c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());

上面的代码将返回系统区域设置中的月份名称。

如果需要其他语言环境,可以通过将Locale替换为Locale.getDefault()等特定语言环境来指定另一个Locale.US

答案 1 :(得分:3)

使用DateFormatSymbols

自豪地复制并粘贴bluebones.net

import java.text.*;

String getMonthForInt(int m) {
    String month = "invalid";
    DateFormatSymbols dfs = new DateFormatSymbols();
    String[] months = dfs.getMonths();
    if (m >= 0 && m <= 11 ) {
        month = months[m];
    }
    return month;
}

答案 2 :(得分:2)

您是否阅读过API? getDisplayName(...)方法看起来像是一个很好的起点。在一个声明中这样做是一个可怕的要求。

答案 3 :(得分:0)

TL;博士

A

...或...

Month.of( 12 ).getDisplayName( TextStyle.FULL , Locale.US )
  

使用java.time

获取一个月的本地化名称的现代方法是使用Month.DECEMBER.getDisplayName( TextStyle.FULL , Locale.US ) 枚举。这个类是java.time包的一部分,而不是现在取代麻烦的旧的遗留日期时间类,如java.time.MonthDate

要进行本地化,请指定:

  • TextStyle确定字符串的长度或缩写。
  • Locale确定(a)翻译日期名称,月份名称等的人类语言,以及(b)决定缩写,大写,标点符号,分隔符等问题的文化规范

示例代码。

Calendar
  

month.toString():JULY

     

outputMonthNameEnglish:July

     

outputMonthQuébec:juillet

使用Month month = Month.of( 7 ); String outputConstantName = month.toString(); String outputMonthNameEnglish = month.getDisplayName( TextStyle.FULL , Locale.US ); String outputMonthQuébec = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ); enum对象按名称而不是月份编号可以方便,易于阅读,并且不易出错。

Month

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore