Có oneliner để có được tên của tháng khi chúng ta biết int monthNumber = calendar.get(Calendar.MONTH)
không? Hay cách dễ nhất là gì?
Có oneliner để có được tên của tháng khi chúng ta biết int monthNumber = calendar.get(Calendar.MONTH)
không? Hay cách dễ nhất là gì?
Câu trả lời:
Bạn cũng sẽ nhận được theo cách này.
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;
}
bạn có thể đạt được nó bằng cách sử dụng SimpleDateFormat , có nghĩa là để định dạng ngày và giờ.
Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
Đơn giản như thế này
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
октября
thay vì Октябрь
, bạn có thể mong đợi.
Đây là giải pháp tôi đưa ra cho một dự án lớp:
public static String theMonth(int month){
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return monthNames[month];
}
Số bạn chuyển đến đến từ một Calendar.MONTH
cuộc gọi.
new SimpleDateFormat("MMMM").format(cal.getTime());
nếu bạn có giao diện đa ngôn ngữ, bạn có thể sử dụng getDisplayName để hiển thị tên của tháng với quyền kiểm soát ngôn ngữ hiển thị.
đây là một ví dụ về hiển thị tên tháng bằng tiếng Anh, frensh, tiếng Ả Rập và tiếng Ả Rập ở quốc gia cụ thể như "Syria":
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());
kết quả là:
January
janvier
يناير
كانون الثاني
Sat Jan 17 19:31:30 EET 2015
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
Đối với một số ngôn ngữ (ví dụ: tiếng Nga), đây là cách chính xác duy nhất để lấy tên tháng độc lập.
Đây là những gì bạn nhận được, nếu bạn sử dụng getDisplayName
từ Calendar
hoặc DateFormatSymbols
trong tháng 1:
января (đúng cho một chuỗi ngày hoàn chỉnh: " 10 января, 2014 ")
nhưng trong trường hợp tên tháng độc lập, bạn sẽ mong đợi:
январь
Làm thế nào về việc sử dụng Joda-Time . Đó là một API ngày-giờ tốt hơn nhiều để làm việc (Và January
có nghĩa là tháng Giêng ở đây. Nó không giống như Lịch, sử dụng 0-based
chỉ mục trong nhiều tháng).
Bạn có thể sử dụng AbstractDateTime#toString( pattern )
phương pháp để định dạng ngày ở định dạng được chỉ định:
DateTime date = DateTime.now();
String month = date.toString("MMM");
Nếu bạn muốn đặt tên tháng cho một số tháng cụ thể, bạn có thể thực hiện như sau:
int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");
Phương pháp trên sử dụng Ngôn ngữ mặc định hiện tại của JVM của bạn cho ngôn ngữ của tên tháng. Thay vào đó, bạn muốn chỉ định một đối tượng Locale.
String month = date.toString( "MMM", Locale.CANADA_FRENCH );
SimpleDateFormat
vàDate
Month::getDisplayName
Kể từ Java 8, hãy sử dụng Month
enum. Các getDisplayName
phương pháp tự động localizes tên của tháng.
Vượt qua:
TextStyle
để xác định độ dài hoặc cách viết tắt.Locale
để chỉ định ngôn ngữ con người được sử dụng trong bản dịch và các quy tắc văn hóa được sử dụng để viết tắt, dấu câu, v.v.Thí dụ:
public static String getMonthStandaloneName(Month month) {
return month.getDisplayName(
TextStyle.FULL_STANDALONE,
Locale.getDefault()
);
}
Đó có thể là một câu hỏi cũ, nhưng để lấy tên của tháng khi chúng ta biết các chỉ số, tôi đã sử dụng
String month = new DateFormatSymbols().getMonths()[monthNumber - 1];
hoặc cho những cái tên ngắn gọn
String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];
Xin lưu ý rằng bạn monthNumber
bắt đầu đếm từ 1 trong khi bất kỳ phương thức nào ở trên trả về một mảng, vì vậy bạn cần bắt đầu đếm từ 0.
Mã này có hỗ trợ ngôn ngữ. Tôi đã sử dụng chúng trong Ứng dụng Android.
String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,...
String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...
Tôi thấy điều này dễ dàng hơn nhiều ( 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
bắt đầu chỉ mục của nó với January = 1, trong khi Lịch bắt đầu với January = 0? Sẽ không Month.of(calendar.get(Calendar.MONTH));
thất bại trong trường hợp của tháng Giêng?
Một chiều:
Chúng tôi có Month
API trong Java ( java.time.Month
). Chúng ta có thể nhận được bằng cách sử dụngMonth.of(month);
Ở đây, Month
chúng được lập chỉ mục dưới dạng số để bạn có thể cung cấp Month.JANUARY
hoặc cung cấp chỉ mục trong API ở trên, chẳng hạn như 1, 2, 3, 4.
Cách thứ hai:
ZonedDateTime.now().getMonth();
Điều này có sẵn trong java.time.ZonedDateTime
.
Tôi đã tạo một tiện ích mở rộng kotlin dựa trên các câu trả lời trong chủ đề này và sử dụng câu trả lời DateFormatSymbols, bạn sẽ nhận được phản hồi được bản địa hóa.
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]
}
Điều này đã làm việc cho tôi
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));
Nó trả về tên tiếng Anh của tháng. 04 trả về THÁNG 4 và như vậy.
String englishMonth (int month){
return Month.of(month);
}
Month
hoặc áp dụng toString
cho kết quả trước khi trả về.
từ tài liệu java SimpleDateFormat:
* <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>