มี oneliner เพื่อรับชื่อเดือนเมื่อเรารู้หรือไม่
int monthNumber = calendar.get(Calendar.MONTH)
หรือวิธีไหนง่ายที่สุด?
มี oneliner เพื่อรับชื่อเดือนเมื่อเรารู้หรือไม่
int monthNumber = calendar.get(Calendar.MONTH)
หรือวิธีไหนง่ายที่สุด?
คำตอบ:
คุณจะได้รับวิธีนี้ด้วย
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;
}
คุณสามารถทำได้โดยใช้SimpleDateFormatซึ่งมีไว้เพื่อจัดรูปแบบวันที่และเวลา
Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));
ง่ายๆเพียงเท่านี้
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
โทร
new SimpleDateFormat("MMMM").format(cal.getTime());
หากคุณมีอินเทอร์เฟซหลายภาษาคุณสามารถใช้ 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 เวลา เป็น 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");
แนวทางข้างต้นใช้ Locale เริ่มต้นปัจจุบันของ JVM ของคุณสำหรับภาษาของชื่อเดือน คุณต้องการระบุวัตถุโลแคลแทน
String month = date.toString( "MMM", Locale.CANADA_FRENCH );
SimpleDateFormat
และDate
Month::getDisplayName
ตั้งแต่ Java 8 ให้ใช้Month
enum getDisplayName
วิธี localizes ชื่อของเดือนโดยอัตโนมัติ
ผ่าน:
TextStyle
เพื่อกำหนดระยะเวลาสั้นหรือสั้นเพียงใดLocale
เพื่อระบุภาษาของมนุษย์ที่ใช้ในการแปลและบรรทัดฐานทางวัฒนธรรมที่ใช้สำหรับตัวย่อเครื่องหมายวรรคตอน ฯลฯตัวอย่าง:
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));
}
Month
เริ่มดัชนีด้วยมกราคม = 1 ในขณะที่ปฏิทินเริ่มต้นด้วยมกราคม = 0? จะไม่Month.of(calendar.get(Calendar.MONTH));
ล้มเหลวในกรณีเดือนมกราคม?
คุณจะได้รับหนึ่งบรรทัดดังนี้:
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
API ใน Java ( java.time.Month
) เราสามารถรับได้โดยใช้Month.of(month);
ที่นี่Month
มีการจัดทำดัชนีเป็นตัวเลขเพื่อให้คุณสามารถระบุMonth.JANUARY
หรือจัดทำดัชนีใน API ด้านบนเช่น 1, 2, 3, 4
วิธีที่สอง:
ZonedDateTime.now().getMonth();
มีอยู่ในjava.time.ZonedDateTime
.
ฉันสร้างส่วนขยาย 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());
Calender cal = Calendar.getInstance(Locale.ENGLISH)
String[] mons = new DateFormatSymbols(Locale.ENGLISH).getShortMonths();
int m = cal.get(Calendar.MONTH);
String mName = mons[m];
DateFormat date = new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
ส่งคืนชื่อภาษาอังกฤษของเดือน 04 ส่งคืน APRIL และอื่น ๆ
String englishMonth (int month){
return Month.of(month);
}
Month
หรือใช้toString
กับผลลัพธ์ก่อนส่งคืน
จาก SimpleDateFormat java doc:
* <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>