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