将UTC时间解析为CET / CEST

时间:2018-10-26 09:53:16

标签: java datetime timezone utc dst

我从数据库中获取的数据是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 :(得分:0)

请参考以下代码段:

            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));

答案 1 :(得分:0)

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 [非洲/阿尔及尔]

答案 2 :(得分:0)

您应该使用的课程是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);