首页 > 解决方案 > 即使在 Java 中未选中 Systems Daylight 选项,也始终使用 Java 中的夏令时获取时区

问题描述

我正在尝试Timezone使用 Java阅读

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

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

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

例如 Goto Systems(Windows) -> ChangeDateandTimeSettings -> Change Timezone -> Set Timezoene to UTC+00:00 Dublin,Edinburg,Lisbon,London 现在运行上面的代码并选中 Automatically Adjust Sytems time 你会得到结果“Europe/ London"现在禁用复选框,您将获得结果为GMT,在这两种情况下,我都希望结果为Europe/London

标签: javawindowstimezonedst

解决方案


可能您可以尝试获取某个时期的天数。

以下方法查找期间开始日期到期间结束日期之间的天数。这意味着开始日期被计算为期间内的天数,而不是结束日期。例如,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();
    }

希望这可以帮助。


推荐阅读