0

Я получаю это стандартное время даты с сервера:SimpleDateFormat Ошибка - дата ПН не поддается синтаксическому анализу 14 декабря 13:25:00 CET 2015

Mon Dec 14 13:25:00 CET 2015

Я использую этот код для преобразования его в дату:

DateFormat formatter; 
//"Mon Dec 14 13:25:00 CET 2015 
formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 

Но это дает мне ошибку:

java.text.ParseException: Unparseable date: "Mon Dec 14 13:25:00 CET 2015" (at offset 20)

+0

http://stackoverflow.com/questions/2009207/java-unparseable-date-exception –

+0

Пожалуйста, можете проверить ... я прошел много сообщений ... но все еще его ошибка ... @IntelliJAmiya Это будет очень полезно ... –

ответ

0

вход имеет будний день и название месяца на английском языке, так что пр obably проблема локали. SimpleDateFormat использует стандартную локаль системы, если вы ее не укажете, - проверьте значение java.util.Locale.getDefault() в вашей системе, вероятно, это не будет en (на английском языке).

Если установить локаль, все должно работать:

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH); 
formatter.parse("Mon Dec 14 13:25:00 CET 2015")); 

New Java Date/Time API

Старые классы (Date, Calendar и SimpleDateFormat) имеют lots of problems и design issues, и они заменяются новыми API.

Если вы используете Java 8, рассмотрите возможность использования new java.time API. Это проще, less bugged and less error-prone than the old APIs.

Если вы используете Java < = 7, вы можете использовать ThreeTen Backport, большой Backport для Java 8 в новые классы даты/времени. И для Android, есть ThreeTenABP (подробнее о том, как его использовать here).

Код ниже подходит для обоих. Единственное различие - это имена пакетов (в Java 8 - java.time, а в ThreeTen Backport (или AndroidThereTrans Android) - org.threeten.bp), но классы и методы имена одинаковы.

Одна большая разница в том, что новый API использует IANA timezones names (всегда в формате Continent/City, как America/Sao_Paulo или Europe/Berlin). Избегайте использования трехбуквенных сокращений (например, CET или), потому что они ambiguous and not standard.

Вы можете получить список доступных часовых поясов (и выбрать тот, который наилучшим образом соответствует вашей системе), позвонив по номеру ZoneId.getAvailableZoneIds(). В вашем случае, CET ярлык для «Central European Time», но есть более 30 различных регионы (или часовые пояса), которые используют CET аббревиатуру:

Europe/Ljubljana, Europe/Rome, Atlantic/Jan_Mayen, Europe/Berlin, Africa/Ceuta, Africa/Algiers, Europe/Zurich, Europe/Oslo, Europe/Amsterdam, Poland, Europe/Stockholm, Europe/Vatican, Europe/Budapest, Europe/Gibraltar, Europe/Bratislava, Europe/San_Marino, Europe/Madrid, Europe/Zagreb, Europe/Copenhagen, Europe/Malta, Europe/Brussels, Europe/Vienna, Europe/Busingen, Europe/Vaduz, Europe/Warsaw, Europe/Prague, Europe/Skopje, Europe/Podgorica, Europe/Paris, Africa/Tunis, Europe/Sarajevo, Europe/Tirane, Europe/Luxembourg, Europe/Andorra, Europe/Belgrade, Arctic/Longyearbyen, Europe/Monaco

Я выбрал один для этого теста, но упали бесплатно выбрать тот, который лучше всего подходит для вашей системы.

// create formatter (this is thread-safe, while SimpleDateFormat isn't) 
DateTimeFormatter fmt = new DateTimeFormatterBuilder() 
    // pattern for date/time 
    .appendPattern("EEE MMM dd HH:mm:ss ") 
    // timezone (use Europe/Berlin as prefered value for CET) 
    .appendZoneText(TextStyle.SHORT, Collections.singleton(ZoneId.of("Europe/Berlin"))) 
    // year 
    .appendPattern(" yyyy") 
    // use English locale to parse weekday and month name 
    .toFormatter(Locale.ENGLISH); 

// ZonedDateTime is a date and time with a timezone 
ZonedDateTime z = ZonedDateTime.parse("Mon Dec 14 13:25:00 CET 2015", fmt); 
System.out.println(z); // 2015-12-14T13:25+01:00[Europe/Berlin] 

Выход будет:

2015-12-14T13:25+01:00[Europe/Berlin]

Если вы хотите пользовательский формат, вы можете использовать форматировщик, а также:

System.out.println(z.format(fmt)); // Mon Dec 14 13:25:00 CET 2015 

Выход будет:

Mon Dec 14 13:25:00 CET 2015

Смежные вопросы