即使在 Java 中未选中 Systems Daylight 选项,也始终使用 Java 中的夏令时获取时区

Posted

技术标签:

【中文标题】即使在 Java 中未选中 Systems Daylight 选项,也始终使用 Java 中的夏令时获取时区【英文标题】:Get timezone always with Daylight time saving On in Java even if Systems Daylight option is unchecked in java 【发布时间】:2019-02-24 17:06:46 【问题描述】:

我正在尝试使用 Java 读取 Timezone

String timeZone = TimeZone.getDefault().getId();

如果启用夏令时,它会给我正确的Timezone,但如果它被禁用,它会给我 GMT 的结果。我希望不会得到 GMT,与系统设置无关。

Java 中是否有办法始终将 DST 的结果设为 ON?

例如 转到系统(Windows)-> ChangeDateandTimeSettings -> Change Timezone -> Set Timezoene to UTC+00:00 Dublin,Edinburg,Lisbon,London 现在运行上面的代码并检查自动调整系统时间,你会得到结果 "Europe /London" 现在禁用您获得结果为 GMT 的复选框,在这两种情况下,我都希望结果为 Europe/London

【问题讨论】:

您究竟如何称呼“启用/禁用”夏令时?在 Java 中禁用 DST,您采取了哪些措施,非常非常准确? 我说,“非常非常准确”。我的意思是,非常非常准确。描述您单击的位置和键入的内容。屏幕截图可能会有所帮助 (1) 我无法复制。我将默认时区设置为非洲/摩加迪沙,你的代码给了我——非洲/摩加迪沙,没有提到 DST。然后我将它设置为 America/Santiago 并得到 America/Santiago。 (2) 为什么要让 DST 始终开启?那会有什么意义? (3) 请发布兼容的代码。我得到“TimeZone 类型的方法 getId() 未定义”。 只是你可以更清楚。 “系统(Windows)”没有任何意义。您可以说“这是在 Windows 操作系统上。我启动名为 System 的 Windows 程序(单击 Windows 开始菜单,在程序搜索栏中键入 System)”。没有“ChangeDateandTimeSettings”之类的东西。您可以说“转到导航栏中的控制面板,然后在菜单时钟、语言和区域中,然后选择更改时区” “在这两种情况下,我都希望结果为 Europe/London” - 但是您实际上不会看到系统正在观察的时区。 Europe/London 在 IANA 数据库中具有特定含义,其中包括 DST。当您禁用 DST 时,您实际上是在说“我不想使用正常的时区规则”——因此您的系统实际上不再位于欧洲/伦敦地区。 Java 正确表示系统时区。 (嗯,有点。如果时区改变标准时间,我不确定甚至应该如何处理......) 【参考方案1】:

也许你可以尝试获取某个时期的天数。

以下方法查找期间开始日期到期间结束日期之间的天数。这意味着开始日期被计算为期间内的天数,而不是结束日期。例如,1 月 1 日至 1 月 10 日总共包括 9 天。此方法会考虑夏令时,以确保跨 DST 边界正确计算天数。

例如,

import org.joda.time.Days;
import org.joda.time.LocalDate;

// …

    public int getDaysInPeriod() 

        final LocalDate start;
        final LocalDate end;
        final int daysInCycle;


        if (end.isBefore(start) || end.isEqual(start)) 
            return 0;
        
        return Days.daysBetween(start, end).getDays();
    

希望这会有所帮助。

【讨论】:

感谢您的贡献。那只是我吗?我看不出问题和这个答案之间的联系。

以上是关于即使在 Java 中未选中 Systems Daylight 选项,也始终使用 Java 中的夏令时获取时区的主要内容,如果未能解决你的问题,请参考以下文章

DOM 中未更新默认选择选项,即使 v-model 属性正在更新

Java中未处理的异常错误,即使使用try-catch也是如此

如果在 Woocommerce 中未选中复选框,则隐藏元素

更改 TabView (SwiftUI) 中未选中图标的颜色

如何更改 iOS 7 中未选择的标签栏项目的颜色?

如何更改标签栏中未选中项目的颜色?