为什么我的 getTimeZone().getDisplayName 报告偏移量错误?

Why's my getTimeZone().getDisplayName reporting wrong offset?

我正在不同时区测试我的应用程序。我手动将物理 phone 的时区更改为英国伦敦,即 GMT+00:00

但是,当我使用 myCalendar.getTimeZone().getDisplayName(true, TimeZone.SHORT) 打印时区时,它会打印:

GMT+01:00

为什么要在偏移量上增加一个小时?

编辑:

通过将 getDisplayName 的第一个参数设置为 false,我得到了正确的 GMT+00:00 但我不确定为什么要将它设置为 false。据我所知,英国伦敦总是GMT+00:00?我错了吗?

根据 API,getDisplayName() 的第一个参数指示是否应使用夏令时。

Returns a name in the specified style of this TimeZone suitable for presentation to the user in the default locale. If the specified daylight is true, a Daylight Saving Time name is returned (even if this TimeZone doesn't observe Daylight Saving Time). Otherwise, a Standard Time name is returned.

这可能就是为什么将该值设置为 true 时时间提前一个小时的原因,因为 true 值将导致夏令时,即使在该时区没有观察到。

As far as I know, London UK is always GMT+00:00? Am I wrong?

是的,你错了。英国在冬天使用格林威治标准时间 (GMT),在夏天使用当地称为 "British Summer Time" (BST) 的夏令时。

  • 格林威治标准时间 = UTC+00:00
  • 英国夏令时 = UTC+01:00

引用here, and here.