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));
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[非洲/阿尔及尔]
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);
添加回答
举报