Java Date Parsing Timezone, вызывающий ошибку разбора - PullRequest
3 голосов
/ 14 марта 2012

Я получаю ParseException со следующим кодом, и я не могу его исправить:

String date = "Tue Mar 13 2012 10:48:05 GMT-0400";
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzzX"); //Tried zzzZ at the end as well
System.out.println(format.parse(date));

Если я вычту -0400 и X (или Z) в конце SimpleDateFormat, то все будет работать нормально, но как только оно будет в коде, оно просто не будет работать. Какой символ я должен использовать вместо этого? Я использую Java 7.

Вот ошибка синтаксического анализа, которую я получаю:

java.text.ParseException: Unparseable date: "Tue Mar 13 2012 10:48:05 GMT-0400"
at java.text.DateFormat.parse(DateFormat.java:357)
java.text.ParseException: Unparseable date: "Tue Mar 13 2012 10:48:05 GMT-0400"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.throwaway.parse.DateParsing.testDate(TestDate:17)

Ответы [ 5 ]

2 голосов
/ 14 марта 2012

Три вопроса, связанные со смешанным использованием. Или:

  1. Используйте одиночные строчные буквы "z" и ":", разделяющие ваш час и время в часовом поясе при использовании "GMT (+/-) чч: мм" или
  2. Используйте одну заглавную букву "Z" и удалите "GMT" из своего часового пояса, и вы можете использовать формат "(+/-) hhmm", или
  3. Используйте одну заглавную букву "X" и по-прежнему отбрасывайте "GMT", но вы можете использовать любой формат зоны hhmm.

Из Javadoc:

  • z Общий часовой пояс Тихоокеанское стандартное время; ТИХООКЕАНСКОЕ СТАНДАРТНОЕ ВРЕМЯ; GMT-08: 00
  • Z RFC 822 часовой пояс -0800
  • X часовой пояс ISO 8601 -08; -0800; -08: 00
2 голосов
/ 14 марта 2012

GMT часть GMT-0400 вашей строки вызывает проблему.
Параметр Z (или X в Java 7) соответствует только -4000. Вы должны убежать GMT, используя одинарные кавычки, такие как:

DateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z", Locale.US);

Обратите внимание, что также рекомендуется помещать Local в ваш DateFormat. Без этого ваш код не будет работать в других странах (например, здесь, во Франции ...).

0 голосов
/ 14 марта 2012

Если вы всегда ожидаете, что ваш часовой пояс будет представлен таким образом, вы можете поместить «GMT» в одинарные кавычки в строке формата, чтобы предотвратить его анализ:

EEE MMM dd yyyy HH:mm:ss 'GMT'XX

Немного странно, что ни одиниз встроенных форматов может разобрать его хотя.Возможно, Javadoc неверен, когда он перечисляет GMT-08:00 в качестве примера z?

0 голосов
/ 14 марта 2012

используйте "EEE MMM dd yyyy HH:mm:ss zzzZ".zzz для GMT и Z для 'RFC 822 time zone' см.

Проверьте это

0 голосов
/ 14 марта 2012

Шаблон zzzz может анализировать только строки в стиле «GMT-04: 00». Ваш пример может быть проанализирован с этим шаблоном: EEE MMM dd yyyy HH:mm:ss Z

...