2014-01-30 5 views
2

У меня есть java-класс внутри файла jar, который находится на сервере JBoss, который вызывается через файл bash следующим образом.Неполадка разбора даты в SimpleDateFormat

java -cp /com/site/domain/TimeFormatter.jar packOne.subPack.Test 

Но у меня возникла ошибка при разборе приведенной ниже даты.

java.text.ParseException: Unparseable date: "Wed, 29 Jan 2014 21:00:00 GMT" 
    at java.text.DateFormat.parse(DateFormat.java:335) 

Java CODE:

Date date = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss z").parse("Sun, 26 Jan 2014 21:00:00 GMT"); 
System.out.println("main().date : " + date); 

Что я здесь отсутствует? Я прочитал много сообщений о неправильной работе SimpleDateFormat. Но это кое-что, что я не нашел среди этих сообщений.

Примечание: Я думал, что это из-за изменения версии Java или какой-то вещи. Но я выполнил ту же программу с разными версиями на моей машине. Он отлично работал. сервера версия Java «1.5.0_22»

локали деталь:

LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

ответ

3

отлично работает для меня, и я думаю, что это не Java версии ... вопрос о связанных, но больше из Locale problem :)

Задать Locale.ENGLISH для вашего SimpleDateFormat должно окончательно заставить его работать. Например, вы могли бы сделать:

final Date date = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss z", Locale.ENGLISH).parse("Sun, 26 Jan 2014 21:00:00 GMT"); 

Как указано в javadoc entry for SimpleDateFormat, дата разбора локаль чувствительных. Я должен признать, что я точно не знаю, как ваша строка не соответствует вашему Locale,, но мы можем продолжить исследование, если ... мы знаем, что ваш по умолчанию Locale на самом деле есть :)

+0

Можете ли вы объяснить, почему он ошибается, не указав Locale? – Keerthivasan

+0

Предполагая, что локаль по умолчанию не является локалью.ENGLISH, SimpleDateFormat ожидает названия дней и месяцев на каком-то другом языке (считая, что английские ошибки неверны). –

+0

Хм ... Я не пробовал эту штуку. Позвольте мне попробовать и обновить через некоторое время – namalfernandolk

1

Современные Java-классы даты и времени имели не совсем вышел, когда этот вопрос был впервые задан и ответил. Я хотел бы внести вклад в современное решение, которое я рекомендую использовать в настоящее время.

ZonedDateTime dateTime = ZonedDateTime.parse("Wed, 29 Jan 2014 21:00:00 GMT", 
      DateTimeFormatter.RFC_1123_DATE_TIME); 

Я собирался написать то же самое о необходимости локализации, как в другом ответе, но потом я увидел свет: ваша дата-время строка соответствует формату RFC 1123. Это встроено с Java-8 и более поздними версиями, а также с ThreeTen Backport, backport современных классов на Java 6 и 7. DateTimeFormatter.RFC_1123_DATE_TIME работает на английском языке всегда, независимо от локали. Таким образом, вышесказанное - это все, что вам нужно. Протестировано на компьютере с датским стандартом по умолчанию.

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