Разобрать дату с часовым поясом "Etc / GMT" - PullRequest
7 голосов
/ 30 ноября 2011

Моя первая попытка была:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
Date date = formatter.parse(string);

Выдает ParseException, поэтому я нашел этот хак:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
TimeZone timeZone = TimeZone.getTimeZone("Etc/GMT");
formatter.setTimeZone(timeZone);
Date date = formatter.parse(string);

Это тоже не сработало, и теперь я застрял. Он анализируется без проблем, если я просто изменил часовой пояс на «GMT».

edit: Пример строки для разбора будет "2011-11-29 10:40:24 Etc / GMT"

edit2: Я бы предпочел не удалять информацию о часовом поясе полностью. Я кодирую сервер, который получает дату от внешнего пользователя, поэтому, возможно, другие даты будут иметь другие часовые пояса. Если быть более точным: эта конкретная дата, которую я получаю, связана с квитанцией с сервера Apple после совершения покупки в приложении для приложения iphone, но я также могу получать даты из других источников.

Ответы [ 3 ]

3 голосов
/ 24 октября 2012

Не знаю, относится ли этот вопрос к вам, но если вы используете время Joda, это сработает:

DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss ZZZ").parseDateTime(s)

Без времени Joda будет работать следующее (хотя и немного больше):

String s = "2011-11-29 10:40:24 Etc/GMT";

// split the input in a date and a timezone part            
int lastSpaceIndex = s.lastIndexOf(' ');
String dateString = s.substring(0, lastSpaceIndex);
String timeZoneString = s.substring(lastSpaceIndex + 1);

// convert the timezone to an actual TimeZone object
// and feed that to the formatter
TimeZone zone = TimeZone.getTimeZone(timeZoneString);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formatter.setTimeZone(zone);

// parse the timezoneless part
Date date = formatter.parse(dateString);
0 голосов
/ 30 ноября 2011

У меня это тоже не сработало, дело в том, что я попытался установить TimeZone для SimpleDateFormatter на «Etc / GMT», а затем отформатировал новую дату, вот что получилось:

2011-11-30 10:46:32 GMT + 00: 00

Итак, Etc / GMT переводится как GMT + 00: 00

Если вы действительно хотите придерживаться разбора "2011-09-02 10:26:35 Etc / GMT" , тогда следующее тоже поможет, даже без учета явного изменения часового пояса:

java.text.SimpleDateFormat isoFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'Etc/GMT'");
isoFormat.parse("2010-05-23 09:01:02 Etc/GMT");

Работает нормально.

0 голосов
/ 30 ноября 2011

у меня работает следующий код


   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
            sdf.setTimeZone(TimeZone.getTimeZone("Etc/GMT"));
            try { System.out.println( sdf.parse("2011-09-02 10:26:35 Etc/GMT") ); 
            } catch (ParseException e){ 
                e.printStackTrace(); 
            }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...