【问题标题】:Why's my getTimeZone().getDisplayName reporting wrong offset?为什么我的 getTimeZone().getDisplayName 报告偏移量错误?
【发布时间】:2019-05-25 20:23:49
【问题描述】:

我正在不同时区测试我的应用。我手动将实体手机的时区更改为英国伦敦,即 GMT+00:00

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

GMT+01:00

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

编辑:

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

【问题讨论】:

    标签: java android calendar timezone timezone-offset


    【解决方案1】:

    据我所知,英国伦敦始终是 GMT+00:00?我错了吗?

    是的,你错了。英国在冬季采用格林威治标准时间 (GMT),在夏季采用夏令时,当地称为“英国夏令时”(BST)。

    • GMT = UTC+00:00
    • 英国夏令时 = UTC+01:00

    参考herehere

    【讨论】:

    • > 英国在冬季观察格林威治标准时间 (GMT) 如果是这种情况并且目前是冬季时间,那么为什么它报告 GMT+01:00?现在不应该报0,夏天报1吗?
    • 没有。第一个参数控制它,而不是运行代码的时间。您指定了 true,因此您将获得适用于夏令时的那个 - 无论现在是否是夏令时。
    • 哦,好吧,那是有道理的!谢谢你的解释!
    【解决方案2】:

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

    返回此 TimeZone 的指定样式的名称,适用于 在默认语言环境中向用户展示。如果指定 日光为真,返回夏令时名称(即使 此时区不遵守夏令时)。否则,一个 返回标准时间名称。

    这可能就是为什么时间比该值提前一小时而将该值设置为 true 的原因,因为 true 值将导致夏令时,即使在该时区未观察到它也是如此。

    【讨论】:

    • 感谢您的报价,重点是。正如另一个答案所解释的那样,伦敦使用夏令时(DST)(那么他们在英国退欧后选择什么还有待观察)。无论时区如何,您都不能只添加一个小时,因为 (1) 更正可能是 30 分钟或 2 小时 (2) 在时区缩写的情况下,例如 IST,您不能发明一个夏令时缩写那不存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多