неожиданные результаты с разбором GMT в Java - PullRequest
0 голосов
/ 20 октября 2011

Я использую код ниже, чтобы разобрать строку в дату GMT-> EDT. Я не понимаю результаты, которые я вижу.

        SimpleDateFormat dformat = new SimpleDateFormat("yyyyMMdd-hh:mm:ss");
        TimeZone gmt = TimeZone.getTimeZone("GMT");
        dformat.setTimeZone(gmt);
        Date d = dformat.parse(time);

Если время = "20111019-13: 00: 00", то d заканчивается 19 октября 09:00:00 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2011 г. быть вторником 18 октября 20:59:59 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2011. Как это может быть?

1 Ответ

1 голос
/ 20 октября 2011

Вы имели в виду HH:mm:ss для компонента времени, а не hh:mm:ss. Он использовал 12-часовые часы и эффективно интерпретировал 12:59:59 00: 59: 59.

Обратите внимание, что ваш синтаксический анализ не выполняет преобразование в определенный часовой пояс - потому что Date не знает о часовых поясах . Вы видите только EDT, потому что (я подозреваю) вы печатаете d.toString(), который всегда использует местный часовой пояс.

API даты / времени Java довольно ужасен - если возможно, я бы настоятельно рекомендовал вам перейти на Joda Time , где вы бы использовали DateTime, что делает имеет часовой пояс ... и позволяет вам конвертировать между ними.

...