Вы можете настроить DateFormatSymbols, используемый SimpleDateFormat:
DateFormatSymbols symbols = DateFormatSymbols.getInstance();
String[] months = symbols.getShortMonths();
months[11] = "Dece";
symbols.setShortMonths(months);
DateFormat fmt =
new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z", symbols);
String s = "Thu, 8 Dece 2016 09:54:00 GMT";
Date date = fmt.parse(s);
Вы также можете сделать это с Java 8 Дата- временные классы, хотя это немного более подробный:
Locale locale = Locale.getDefault();
Map<Long, String> monthNames = new HashMap<>(12);
for (Month month : Month.values()) {
long value = month.getValue();
String name = month.getDisplayName(TextStyle.SHORT, locale);
monthNames.put(value, name);
}
monthNames.put(12L, "Dece");
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
builder.appendPattern("EEE, d ");
builder.appendText(ChronoField.MONTH_OF_YEAR, monthNames);
builder.appendPattern(" yyyy HH:mm:ss z");
DateTimeFormatter formatter = builder.toFormatter();
String s = "Thu, 8 Dece 2016 09:54:00 GMT";
ZonedDateTime dateTime = ZonedDateTime.parse(s, formatter);
Date date = Date.from(dateTime.toInstant());
Можете ли вы объяснить, как там 'e'? Является ли это правильной аббревиатурой названия месяца, когда локализовано в какой-то определенной локали? –