[英]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.