在 Java 中将月份字符串转换为整数

问题描述 投票:0回答:6

给定月份字符串,例如:

    "Feb"
or
    "February"

是否有任何核心 Java 或第三方库功能允许您以与区域设置无关的方式将此字符串转换为相应的月份数字?

java parsing datetime
6个回答
48
投票

您可以使用 SimpleDateFormat 解析月份:

    Date date = new SimpleDateFormat("MMM", Locale.ENGLISH).parse("Feb");
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int month = cal.get(Calendar.MONTH);
    System.out.println(month == Calendar.FEBRUARY);

int month
与 int 进行比较时要小心(它确实 not 等于 2!)。最安全的方法是使用
Calendar
的静态字段(如
Calendar.FEBRUARY
)来比较它们。


28
投票

使用 Joda 时间的 SimpleDateFormat 的替代方案:

    import org.joda.time.DateTime;
    import org.joda.time.format.DateTimeFormat;
    import org.joda.time.format.DateTimeFormatter;
    ...

    // if default locale is ok simply omit '.withLocale(...)'
    DateTimeFormatter format = DateTimeFormat.forPattern("MMM");
    DateTime instance        = format.withLocale(Locale.FRENCH).parseDateTime("août");  

    int month_number         = instance.getMonthOfYear();
    String month_text        = instance.monthOfYear().getAsText(Locale.ENGLISH);

    System.out.println( "Month Number: " + month_number );
    System.out.println( "Month Text:   " + month_text   );

    OUTPUT:
        Month Number: 8
        Month Text:   August

13
投票
Java 8+ 中的

java.time

使用 Java 8 及更高版本中内置的现代

java.time 类。它们取代了早期 Java 中的遗留类。这些取代了 Joda-Time 库。

DateTimeFormatter parser = DateTimeFormatter.ofPattern("MMM") .withLocale(Locale.ENGLISH); TemporalAccessor accessor = parser.parse("Feb"); System.out.println(accessor.get(ChronoField.MONTH_OF_YEAR)); // prints 2
    

3
投票
您可以设置一个 switch 语句,如下所示(如下)。 我发布此内容是为了防止有人想要一个简单、易于理解的解决方案 我知道在我输入此内容之前我会想要它:

switch(input2) { case "january": case "jan": input2 = "1"; break; case "febuary": case "feb": input2 = "2"; break; case "march": case "mar": input2 = "3"; break; case "april": case "apr": input2 = "4"; break; case "may": input2 = "5"; break; case "june": case "jun": input2 = "6"; break; case "july": case "jul": input2 = "7"; break; case "august": case "aug": input2 = "8"; break; case "september": case "sep": case "sept": input2 = "9"; break; case "october": case "oct": input2 = "10"; break; case "november": case "nov": input2 = "11"; break; case "december": case "dec": input2 = "12"; break; }
    

2
投票

SimpleDateFormat.parse.


0
投票
方法如下:

String a = "August 10, 2021 10:00 AM"; SimpleDateFormat fromUser = new SimpleDateFormat("MMMM dd, yyyy hh:mm a"); SimpleDateFormat myFormat = new SimpleDateFormat("MM/dd/yyyy"); String reformattedStr = myFormat.format(fromUser.parse(a)); System.out.println(reformattedStr); // 08/10/2021
    
© www.soinside.com 2019 - 2024. All rights reserved.