当我们知道时,是否有一个 oneliner 来获取月份名称:
int monthNumber = calendar.get(Calendar.MONTH)
或者什么是最简单的方法?
您可以使用 来实现它SimpleDateFormat
,这意味着格式化日期和时间:
Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
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;
}
就这么简单
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
这是我为班级项目提出的解决方案:
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
电话。
如果您有多语言界面,您可以使用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
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
对于某些语言(例如俄语),这是获取独立月份名称的唯一正确方法。
getDisplayName
如果您从Calendar
或DateFormatSymbols
一月开始使用,这就是您得到的:
января(对于完整的日期字符串是正确的:“ 10 января, 2014 ”)
但如果是独立的月份名称,您会期望:
январь
使用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 );
Month::getDisplayName
从 Java 8 开始,使用Month
枚举。该getDisplayName
方法自动本地化月份的名称。
经过:
例子:
public static String getMonthStandaloneName(Month month) {
return month.getDisplayName(
TextStyle.FULL_STANDALONE,
Locale.getDefault()
);
}
这可能是一个老问题,但作为一个在我们知道索引时获得月份名称的单行程序,我使用了
String month = new DateFormatSymbols().getMonths()[monthNumber - 1];
或简称
String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];
请注意,您monthNumber
从 1 开始计数,而上述任何方法都返回一个数组,因此您需要从 0 开始计数。
此代码具有语言支持。我曾在 Android 应用程序中使用过它们。
String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,...
String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
我发现这更容易(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));
}
你可以像这样得到它:
String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]
这对我有用:
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);
单程:
我们有Month
Java 中的 API ( java.time.Month
)。我们可以通过使用Month.of(month);
在这里,它们Month
被索引为数字,因此您可以提供Month.JANUARY
或在上述 API 中提供索引,例如 1、2、3、4。
第二种方式:
ZonedDateTime.now().getMonth();
这在java.time.ZonedDateTime
.
Calender cal = Calendar.getInstance(Locale.ENGLISH)
String[] mons = new DateFormatSymbols(Locale.ENGLISH).getShortMonths();
int m = cal.get(Calendar.MONTH);
String mName = mons[m];
最简单的方法
import java.text.DateFormatSymbols;
int month = 3; // March
System.out.println(new DateFormatSymbols().getMonths()[month-1]);
它返回月份的英文名称。04 返回 APRIL 等等。
String englishMonth (int month){
return Month.of(month);
}
我根据本主题中的响应创建了一个 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]
}
import java.text.SimpleDateFormat;
import java.util.Calendar;
Calendar cal = Calendar.getInstance();
String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());
DateFormat date = new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
对于月份的全名:
val calendar = Calendar.getInstance()
calendar.timeInMillis = date
return calendar.getDisplayName(Calendar.MONTH, Calendar.Long, Locale.ENGLISH)!!.toString()
而对于月份的简称:
val calendar = Calendar.getInstance()
calendar.timeInMillis = date
return calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.ENGLISH)!!.toString()
来自 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>