Я отладил SimpleDateFormat
, и кажется, что он будет только анализировать GMT-04:00
, но не GMT-0400
.
Он примет UTC-0400
, однако он выбросит модификатор часов / минут и будетнеправильно проанализировать его как UTC
.(Это происходит с любым другим обозначением часового пояса, кроме GMT
)
Он также будет правильно анализировать -0400
, поэтому наиболее надежным решением, вероятно, является просто удаление GMT
из строки даты.
Результатом этой истории является то, что SimpleDateFormat
совсем не прост.
Обновление: еще один урок заключается в том, что я мог бы сэкономить много времени, передав объект ParsePosition
parse()
method:
DateFormat formatter = new SimpleDateFormat(
"EEE MMM dd yyyy HH:mm:ss zzzz", Locale.ENGLISH);
Date date;
ParsePosition pos = new ParsePosition( 0 );
date = formatter
.parse("Fri Apr 01 2011 00:00:00 UTC-0400", pos);
System.out.println( pos.getIndex() );
Распечатает 28
, указывая, что синтаксический анализ завершился с индексом символа 28, сразу после UTC
.