Java从整数中获取月份字符串

shi*_*ike 44 java date

有没有更好的方法来压缩这种方法,即通过避免开关案例来降低圈复杂度?

String monthString;
        switch (month) {
            case 1:  monthString = "January";       break;
            case 2:  monthString = "February";      break;
            case 3:  monthString = "March";         break;
            case 4:  monthString = "April";         break;
            case 5:  monthString = "May";           break;
            case 6:  monthString = "June";          break;
            case 7:  monthString = "July";          break;
            case 8:  monthString = "August";        break;
            case 9:  monthString = "September";     break;
            case 10: monthString = "October";       break;
            case 11: monthString = "November";      break;
            case 12: monthString = "December";      break;
            default: monthString = "Invalid month"; break;
        }
        System.out.println(monthString);
Run Code Online (Sandbox Code Playgroud)

Fla*_*ash 104

尝试:

import java.text.DateFormatSymbols;
monthString = new DateFormatSymbols().getMonths()[month-1];
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用SimpleDateFormat:

import java.text.SimpleDateFormat;
System.out.println(new SimpleDateFormat("MMMM").format(date));
Run Code Online (Sandbox Code Playgroud)

(您必须在一个Date对象中输入您的月份日期才能使用第二个选项).

  • +1,第一个选项.但它应该是`new DateFormatSymbols().getMonths()[month -1]`.忘了添加`new`关键字. (2认同)
  • 在JDK 8中更改了DateFormatSymbols实现,因此getMonths方法不再为所有Locale返回正确的值:http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html (2认同)

Abh*_*hah 17

Month 枚举

你可以使用Month枚举.此枚举被定义为Java 8及更高版本中内置的新java.time框架的一部分.

int monthNumber = 10;
Month.of(monthNumber).name();
Run Code Online (Sandbox Code Playgroud)

输出将是:

十月

本土化

通过调用getDisplayName相同的枚举来本地化为超出英语的语言.

String output = Month.OCTOBER.getDisplayName ( TextStyle.FULL , Locale.CANADA_FRENCH );
Run Code Online (Sandbox Code Playgroud)

输出:

OCTOBRE


Har*_*Joy 8

获取包含月份名称的数组.

String[] str = {"January",      
   "February",
   "March",        
   "April",        
   "May",          
   "June",         
   "July",         
   "August",       
   "September",    
   "October",      
   "November",     
   "December"};
Run Code Online (Sandbox Code Playgroud)

那么你想在一个月内使用如下:

if(i<str.length)
    monthString = str[i-1];
else
    monthString = "Invalid month";
Run Code Online (Sandbox Code Playgroud)