Преобразование строки месяца в целое в Java
Для строки месяца, например:
"Feb"
or
"February"
Есть ли какая-либо базовая функциональность библиотеки Java или сторонней библиотеки, которая позволила бы вам преобразовать эту строку в соответствующий месяц в агностическом стиле локали?
Ответы
Ответ 1
Альтернатива SimpleDateFormat с использованием времени 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
Ответ 2
Вы можете анализировать месяц с помощью 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 (он не равен 2!). Safest - сравнивать их с помощью статических полей Calendar
(например, Calendar.FEBRUARY
).
Ответ 3
SimpleDateFormat.parse.
Ответ 4
Решение 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