Java 8 Преобразование времени UTC в EDT / EST, чтобы дата оставалась неизменной - PullRequest
0 голосов
/ 02 октября 2018

Я использую ZonedDateTime для переменной в Java.

Я хочу преобразовать значение переменной (часовой пояс UTC по умолчанию) в часовой пояс "Америка / Нью-Йорк", чтобы дата оставалась неизменной.

Пример 4:00 утра UTC= 12:00 по восточному поясному времениДобавьте или вычтите часы из переменной ZonedDateTime, чтобы дата не изменялась.

Как мы можем достичь этого преобразования?

Ответы [ 4 ]

0 голосов
/ 02 октября 2018

Если информация о зоне не требуется для вашего времени UTC, то вам лучше сделать это, используя класс Instant.С объектом Instant вы можете легко перейти на ZonedDateTime в указанном часовом поясе:

Instant instant = Instant.parse("2018-10-02T04:00:00.0Z");
ZonedDateTime nyTime = instant.atZone(ZoneId.of("America/New_York")); 
//2018-10-02 00:00:00
0 голосов
/ 02 октября 2018

при сохранении вашей даты, я думаю, это может сработать

    ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC);
    ZonedDateTime est = utc.plusHours(5); //normally est is 5 hours ahead
0 голосов
/ 02 октября 2018

Вы можете сделать это путем преобразования в LocalDateTime и обратно в ZonedDateTime с указанным часовым поясом:

ZonedDateTime zoned = ZonedDateTime.now();
LocalDateTime local = zoned.toLocalDateTime();
ZonedDateTime newZoned = ZonedDateTime.of(local, ZoneId.of("America/New_York"));
0 голосов
/ 02 октября 2018

Если вы хотите объединить дату из UTC и время из EST, вы можете сделать это следующим образом:

ZonedDateTime utc = ...

ZonedDateTime est = utc.withZoneSameInstant(ZoneId.of("America/New_York"));

ZonedDateTime estInSameDay = ZonedDateTime.of(utc.toLocalDate(), est.toLocalTime(), ZoneId.of("America/New_York"));
...