时区 BST 偏移量错误

ali*_*aab 3 java timezone datetime-parsing java-time zoneddatetime

无法理解为什么 BST(UTC 偏移:UTC +1)在以下代码中得到偏移 +11。我期望+1。

final String lastUpdated = "Mon Sep 27 18:29:00 BST 2021";
final DateTimeFormatter LAST_UPDATED_FORMATTER = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z y").withLocale(Locale.UK);
ZonedDateTime zonedDateTime = ZonedDateTime.parse(lastUpdated, LAST_UPDATED_FORMATTER);
LocalDateTime localDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime();
System.out.println(zonedDateTime.getOffset()); // +11:00; expected +1
System.out.println(localDateTime.toString());
Run Code Online (Sandbox Code Playgroud)

控制台输出:

+11:00
2021-09-27T07:29
Run Code Online (Sandbox Code Playgroud)

一旦使用 UTC 日期,一切就清楚了:

final String lastUpdated = "Mon Sep 27 18:29:00 BST 2021";
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

恐怕这就是使用含糊缩写的后果。BST 可以表示不同的含义,如下所示。

在本例中,它似乎被解释为布干维尔标准时间,实际上是 UTC+11。

(即使在英国,BST 并不总是意味着英国夏令时间。1968 年至 1971 年间,BST 意味着“英国标准时间”,尽管它仍然是 GMT+1。)

使用缩写对于格式化来说“还可以” ,但出于解析目的应尽可能避免。如果您收到的数据知道会使用它,并且您知道它的含义,那么您最好在解析之前在文本中替换它。