我想以编程方式将1-12范围内的整数转换为相应的月份名称。 (例如1 - > 1月,2 - > 2月)等在一个语句中使用Java Calendar类。
注意:我想仅使用Java Calendar类来实现。不建议使用任何开关盒或字符串阵列解决方案。
感谢。
答案 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)
A
...或...
Month.of( 12 ).getDisplayName( TextStyle.FULL , Locale.US )
腊
获取一个月的本地化名称的现代方法是使用Month.DECEMBER.getDisplayName( TextStyle.FULL , Locale.US )
枚举。这个类是java.time包的一部分,而不是现在取代麻烦的旧的遗留日期时间类,如java.time.Month
和Date
。
要进行本地化,请指定:
示例代码。
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。