Разбор UTC времени до CET / CEST - PullRequest
0 голосов
/ 26 октября 2018

Данные, которые я получаю из БД, представлены в формате UTC. Мне нужно конвертировать его в CET / CEST. Я использую приведенный ниже код. Я не уверен, что о CET и CEST позаботятся. Пожалуйста, дайте мне знать, если это заботится о CET и CEST?

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
    return LocalDateTime.parse(ptu, formatter)
            .atOffset(ZoneOffset.UTC)
            .atZoneSameInstant(ZoneId.of("Europe/Amsterdam"))
            .format(formatter);

Ответы [ 3 ]

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

CET и CEST не всегда одинаковы, поэтому вы не можете гарантировать, что один результат удовлетворит обе часовые пояса.

Рассмотрите возможность использования OffsetDateTime для вашего примера

Печать времени сейчас и в «CET» проста:

OffsetDateTime odt = OffsetDateTime.now();
System.out.println(odt); // 2018-10-26T11:25:49.215+01:00
System.out.println(odt.atZoneSameInstant(ZoneId.of("CET"))); // 2018-10-26T12:25:49.215+02:00[CET]

Однако я не верю, что в классе ZoneID есть «CEST».

Итак, выможет напечатать время определенной страны, которую вы знаете, в CEST и сравнить их.

Например, Алжир в настоящее время находится в CET, но Амстердам находится в CEST:

System.out.println(odt.atZoneSameInstant(ZoneId.of("Europe/Amsterdam")));
System.out.println(odt.atZoneSameInstant(ZoneId.of("Africa/Algiers")));

Вывод:

2018-10-26T12: 42: 29,897 + 02: 00 [Европа / Амстердам]

2018-10-26T11: 42: 29,897 + 01: 00 [Африка / Алжир]

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

Класс, который вы должны использовать: ZonedDateTime ; так как он имеет полную поддержку часовых поясов (включая летнее время).

Ваш код должен быть заменен на:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
ZonedDateTime utcTime = LocalDateTime.parse(ptu,formatter).atZone(ZoneId.of("UTC"));
ZonedDateTime yourTime = utcTime.withZoneSameLocal(ZoneId.of("Europe/Amsterdam"));

return yourTime.format(formatter); 
0 голосов
/ 26 октября 2018

Пожалуйста, обратитесь ниже фрагмент:

            ZonedDateTime dateTime =null;
            Date finalDate = null;
            DateTimeFormatter format =null;
            String date = yourdate;
            LocalDateTime lid = LocalDateTime.parse(date, 
            DateTimeFormatter.ofPattern(""yyyy-MM-dd"));
            ZoneId id = ZoneId.of("GMT");//Add yours
            ZonedDateTime gmtZonedDateTime = lid.atZone(id);
            ZoneId zoneId = ZoneId.of("America/Los_Angeles"); //in case your add your
            dateTime = gmtZonedDateTime.withZoneSameInstant(id);
            format = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            SimpleDateFormat sfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            finalDate = sfmt.parse(format.format(dateTime));
...