时区 BST 有错误的偏移量
Timezone BST has wrong offset
无法理解为什么 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());
控制台输出:
+11:00
2021-09-27T07:29
UTC 日期一目了然:
final String lastUpdated = "Mon Sep 27 18:29:00 BST 2021";
恐怕这就是使用含糊不清的缩写的后果。 BST 可以表示不同的意思,如图 here.
在这种情况下,它似乎被解释为布干维尔标准时间,这确实是 UTC+11。
(即使在英国,BST 并不总是指英国夏令时。在 1968 年至 1971 年间,BST 表示“英国标准时间”,尽管它仍然是 GMT+1。)
对于格式化,使用缩写“还算可以”,但对于解析目的,应尽可能避免使用。如果您收到的数据您知道 会使用它,并且您知道它应该意味着什么,那么您最好在解析之前在文本中替换它。
无法理解为什么 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());
控制台输出:
+11:00
2021-09-27T07:29
UTC 日期一目了然:
final String lastUpdated = "Mon Sep 27 18:29:00 BST 2021";
恐怕这就是使用含糊不清的缩写的后果。 BST 可以表示不同的意思,如图 here.
在这种情况下,它似乎被解释为布干维尔标准时间,这确实是 UTC+11。
(即使在英国,BST 并不总是指英国夏令时。在 1968 年至 1971 年间,BST 表示“英国标准时间”,尽管它仍然是 GMT+1。)
对于格式化,使用缩写“还算可以”,但对于解析目的,应尽可能避免使用。如果您收到的数据您知道 会使用它,并且您知道它应该意味着什么,那么您最好在解析之前在文本中替换它。