Java8时间库不能正确解释BST时区

Lib*_*hen 3 java datetime-format java-8 java-time zoneddatetime

我正在迁移我的代码以使用该java.time包,但我发现它DateTimeFormatter不能正确解释时区“BST”(英国夏令时间)。

它没有将其UTC+0100转换为太平洋/布干维尔时区,而是将其转换为太平洋/布干维尔时区。

有谁知道我如何解决这个问题而不需要回到旧的 SimpleDateFormat 或使用明确的时区?我的代码需要在世界多个地区运行。

这个时间戳格式是通过查询另一个系统获得的,所以我无法更改它。看来SimpleDateFormat可以正确识别时区。我的测试代码如下:

String sTime = "Fri Jun 07 14:07:07 BST 2019";
DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("EEE MMM dd kk:mm:ss z yyyy");
ZonedDateTime zd = ZonedDateTime.parse(sTime, FORMATTER);
System.out.println("The time zone: " + zd.getZone());
FileTime ftReturn = FileTime.from(zd.toEpochSecond(), TimeUnit.SECONDS);
System.out.println("File time is: " + ftReturn);

DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH);
Date dtDD = df.parse(sTime);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dtDD);
FileTime ftReturn1 = FileTime.fromMillis(calendar.getTimeInMillis());
System.out.println("File time1 is:  " + ftReturn1);
Run Code Online (Sandbox Code Playgroud)

测试结果:
时区:Pacific/Bougainville
文件时间为:2019-06-07T03:07:07Z
文件时间1为:2019-06-07T13:07:07Z

sfi*_*iss 5

根据https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#SHORT_IDS

BST - 亚洲/达卡

所以我想你不应该使用这个缩写。

编辑:刚刚发现这个问题,它回答了它。

所以不要使用孟加拉国标准时间;)而是使用ZoneId.of("Europe/London")