为了账号安全,请及时绑定邮箱和手机立即绑定

将 UTC 时间解析为 CET/CEST

将 UTC 时间解析为 CET/CEST

HUH函数 2021-12-10 10:08:50
我从 DB 获取的数据采用 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 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

请参考以下片段:


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


查看完整回答
反对 回复 2021-12-10
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

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


查看完整回答
反对 回复 2021-12-10
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-12-10
  • 3 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信