web-dev-qa-db-fra.com

Convertir la chaîne de mois en entier en Java

Étant donné une chaîne de mois telle que:

    "Feb"
or
    "February"

Existe-t-il une fonctionnalité de base de la bibliothèque Java ou tierce qui vous permettrait de convertir cette chaîne en un numéro de mois correspondant de manière indépendante des paramètres régionaux?

29
Dylan Cali

Une alternative à SimpleDateFormat utilisant le temps Joda:

    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
27
Dylan Cali

Vous pouvez analyser le mois en utilisant 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);

Faites attention en comparant int month à un int (ça fait pas égal à 2!). Le plus sûr est de les comparer en utilisant les champs statiques de Calendar (comme Calendar.FEBRUARY).

44
Bart Kiers

Solution Java 8:

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

vous pouvez simplement configurer une déclaration de commutateur, quelque chose comme ceci (ci-dessous) . Je publie ceci au cas où quelqu'un voudrait une solution simple et facile à comprendre Je sais que je l'aurais voulu avant de l'avoir dactylographiée :

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;
            }
1
Carson Graham