Заявление о проблемах: Конвертировать «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. Но я также думаю, что где-то делаю ошибку.
Благодаря Пол
Я считаю, что у вас есть это в обратном направлении. EDT - GMT-4, а EST - GMT-5. Это означает, что выход (05:00:15 GMT) был правильным. – VGR
Вы правы. Я обновил этот пример. Если у вас есть шанс, вы можете посмотреть мой обновленный пример. – user2337757
Это сложно, и, возможно, эвристическое, потому что всегда можно указать время как EST, даже когда EDT активен. Что означает 01:00:15 (и весь час с 1 по 2 часа ночи) происходит дважды, последовательно, в EST в ту ночь. Итак, когда Java анализирует эту дату, должен ли парсер принять первое вхождение этого часа или второе вхождение? – VGR