繁体   English   中英

将UTC时间解析为CET / CEST

[英]Parsing UTC time to CET/CEST

我从数据库中获取的数据是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);

请参考以下片段:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM