2014-10-27 3 views
1

Заявление о проблемах: Конвертировать «2014-11-02 01:00:15 EST» в GMT.Период перехода по часовому поясу Java от EDT до EST

Это кажется достаточно простым. Но почему приведенный ниже код дает неправильный ответ?

фона:

  • EDT ака GMT-4
  • EST ака GMT-5
  • 2014-11-02 01:00:15 EST == 2014-11-02 6:00: 15 GMT
  • Если у меня есть строка с комментариями, она работает !!!
  • EDT (до ноября 2, 2014 в 2 часа ночи) -> в 2 часа ночи мы идем в 1am EST

Пример кода:

ZoneId gmt = ZoneId.of("GMT"); 
//String from = "2014-11-02 01:00:15 GMT-05:00"; 
String from = "2014-11-02 01:00:15 EST"; 

final DateTimeFormatter dateTimeFormatterone = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z"); 
ZnedDateTime zonedDateTime = ZonedDateTime.parse(from, dateTimeFormatterone); 
ZonedDateTime gmtzonedDateTime = zonedDateTime.withZoneSameInstant(gmt); 
String result = gmtzonedDateTime.format(dateTimeFormatterone); 

Это то, что результат.

result == "2014-11-02 05:00:15 GMT" 

это не должно быть результат == "2014-11-02 6:00:15 GMT"

Любая помощь будет большим. Я думаю, что это ошибка на Java. Но я также думаю, что где-то делаю ошибку.

Благодаря Пол

+1

Я считаю, что у вас есть это в обратном направлении. EDT - GMT-4, а EST - GMT-5. Это означает, что выход (05:00:15 GMT) был правильным. – VGR

+0

Вы правы. Я обновил этот пример. Если у вас есть шанс, вы можете посмотреть мой обновленный пример. – user2337757

+0

Это сложно, и, возможно, эвристическое, потому что всегда можно указать время как EST, даже когда EDT активен. Что означает 01:00:15 (и весь час с 1 по 2 часа ночи) происходит дважды, последовательно, в EST в ту ночь. Итак, когда Java анализирует эту дату, должен ли парсер принять первое вхождение этого часа или второе вхождение? – VGR

ответ

0

GMT Данная аббревиатура смещения без :. Изменение

String from = "2014-11-02 01:00:15 GMT-05:00"; 

в

String from = "2014-11-02 01:00:15 GMT-0500"; 

И некоторые логические ошибки:

Если вы идете от 2 до 1 на 2 ноября 2014 года в 2 часа ночи, не правильно ли идти от 6 до 5, а также 5 утра, верно?

+0

Эта вещь «2014-11-02 01:00:15 GMT-05: 00» возвращает правильное значение GMT ​​«2014-11-02 06:00:15 GMT». Этот «2014-11-02 01:00:15 EST» возвращается «2014-11-02 05:00:15 GMT». Не знаете, почему это происходит, потому что это «2014-11-02 01:00:15 GMT-05: 00» и этот «2014-11-02 01:00:15 EST» должны быть равны. Теперь, если вы введете «2014-11-02 02:00:00 GMT-05: 00» или «2014-11-02 02:00:00 EST», вы получите правильный результат от «2014-11-02 07: 00:00 GMT ". Это просто в тех окнах, где вы переходите с 2 утра по восточному стандартному времени до 1 часа ночи, где я вижу этот вопрос – user2337757

+0

Да, но давайте предположим, что у нас нет DST. Тогда «2014-11-02 06:00:15» GMT будет правильным. Теперь, 2 ноября, 1:00, мы поставили часы на 1 час назад, и мы получили на один час меньше за все часы, прошедшие за это время. Таким образом: «2014-11-02 05:00:15 GMT» –

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