gpt4 book ai didi

java - DST_OFFSET 在不应该改变的时候改变

转载 作者:太空宇宙 更新时间:2023-11-04 07:41:43 24 4
gpt4 key购买 nike

我正在尝试运行下面的代码。我定义了一个时区,夏令时从 3 月 2 日第 4 个星期日开始,到 3 月 5 日星期日 2 点结束。

  SimpleTimeZone st = new SimpleTimeZone(-18000000, "DSTTesting", Calendar.MARCH, 4, 1, 7200000, Calendar.MARCH, -1, 1, 7200000);

Calendar cal = Calendar.getInstance(st);
cal.set(2013, 0, 1, 0, 0, 0);
cal.set(Calendar.MILLISECOND, 0);
System.out.println("DST_OFFSET before subtracting hours : "+cal.get(Calendar.DST_OFFSET));
cal.add(Calendar.HOUR, -2);
System.out.println("DST_OFFSET after subtracting hours : "+cal.get(Calendar.DST_OFFSET));

输出为:
减去小时数之前的 DST_OFFSET : 0
减去小时数后的 DST_OFFSET:3600000

不知道为什么当我从 2013 年 1 月凌晨 1 点减去 2 小时后 DST_OFFSET 会发生变化。理想情况下是 2013 年 1 月 1 日和 2012 年 12 月 31 日,这两个日期均超出我创建的时区的 DST 周期,因此两者的 DST_OFFSET 值应相同。

最佳答案

我认为您有一些无效的构造函数参数。请参阅文档here .

您指定的起始值是:

Calendar.MARCH, 4, 1

如果您的意思是“3 月 4 日”,那么您应该为星期值指定零:

Calendar.MARCH, 4, 0

如果您的意思是“3 月 4 日或之后的第一个星期日”,那么您应该指定一个负的星期值:

Calendar.MARCH, 4, -1

您指定的结束日期看起来没问题。它是:

Calendar.MARCH, -1, 1

这意味着“三月的最后一个星期日”。

我不确定为什么夏令时会因此而关闭,但请尝试纠正它,看看是否会产生影响。

此外 - 您应该认真考虑 Joda Time图书馆而不是这个。您将获得更可靠的结果,并且您不必自己实现所有 DST 规则。

更新

阅读the documentation仔细观察,目前尚不清楚 cal.get(Calendar.DST_OFFSET) 是否会影响日历的当前日期,或者是否仅返回与时区相关的夏令时偏移量。其措辞如下:

This field reflects the correct daylight saving offset value of the time zone of this Calendar if the TimeZone implementation subclass supports historical Daylight Saving Time schedule changes

也许你应该尝试这个?

boolean dst = st.inDaylightTime(cal.getTime());

我只是在这里猜测。我自己没有测试过。

关于java - DST_OFFSET 在不应该改变的时候改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15970713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com