java.util.TimeZone日光信息是如何更新的?

java.util.TimeZone日光信息是如何更新的?,java,timezone,dst,Java,Timezone,Dst,我找不到一个类似的问题,所以就这样 我需要创建一些警报,并基本确定夏时制何时到来,即下周四开始夏时制 问题时区如何知道正确的信息 我这样问是因为,例如,在我的国家——巴西,这一天是政府在一年前确定的。它甚至可能不存在于特定的年份。这可能也发生在其他国家 在上,可以找到以下信息: 如果基础时区实现子类支持历史夏令时时间表和GMT偏移量更改,则此方法返回历史上正确的偏移量值 它说它返回一个历史上正确的。但是这种检测时区的方法有多可靠呢?它是否依赖于常规的java更新,例如,它是否从Windows中的

我找不到一个类似的问题,所以就这样

我需要创建一些警报,并基本确定夏时制何时到来,即下周四开始夏时制

问题时区如何知道正确的信息


我这样问是因为,例如,在我的国家——巴西,这一天是政府在一年前确定的。它甚至可能不存在于特定的年份。这可能也发生在其他国家

在上,可以找到以下信息:

如果基础时区实现子类支持历史夏令时时间表和GMT偏移量更改,则此方法返回历史上正确的偏移量值

它说它返回一个历史上正确的。但是这种检测时区的方法有多可靠呢?它是否依赖于常规的java更新,例如,它是否从Windows中的某个地方读取

提前谢谢

时区更新工具 下面的链接解释了使用时区更新工具在Java中更新时区的官方方法

基本上,下载工具jar并运行命令


java-jar tzupdater.jar选项

每个java实现都有自己的时区定义集副本,由Paul Eggert和

时区的定义和规则确实经常变化。世界各地的政治家都表现出了改变其管辖范围内时区的倾向。你关心这个问题是对的

Java实现的更新通常会附带新的tzdata

不幸的是,政客们有时会在几乎没有或根本没有预警的情况下改变自己的时区,而忽略了这场灾难。有时通知只有几个月,甚至几个星期。例如近年来的俄罗斯、土耳其和摩洛哥。就朝鲜而言,他们最后一次的改变根本没有任何预警

如果您感兴趣的时区在没有任何警告的情况下被更改,那么您可能没有时间等待Java实现的更新版本。因此,您可能需要自己获取新的tzdata,并手动更新已安装的Java实现。有关如何使用Oracle提供的时区更新工具执行此操作的信息,请参阅

请注意,您还需要更新其他地方的时区日期。这些包括您的主机和一些数据库系统,例如


你问:

它是否依赖于常规的java更新,例如,它是否从Windows中的某个地方读取

Java保留自己的时区供Java应用程序使用。您的主机操作系统保留自己的时区数据供自己使用,也供某些本机应用程序使用。其他一些系统,例如,可能保留自己的时区数据

你说:

基本上确定夏时制何时开始,即下周四夏时制开始

请记住,这不是时区更改其与UTC的偏移量的唯一原因。时区因各种政治、外交、军事和文化原因而变化

下面是确定下一个转换的Java代码

永远不要使用,因为它是有问题的遗留日期时间类的一部分。这些类在几年前被JSR310中定义的现代java.time类所取代

将您感兴趣的时区指定为对象

大陆/地区
的格式指定,例如
美国/蒙特利尔
非洲/卡萨布兰卡
,或
太平洋/奥克兰
。切勿使用2-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

ZoneId z=ZoneId.of(“美国/圣保罗”);
获取该区域的规则。查询所有已知转换的列表规则

ZoneRules规则=z.getRules();
列表转换=rules.getTransitions();
transitions.stream().forEach(System.out::println);
过渡[1914-01-01T00:00-03:06:28至-03:00的间隙]

过渡[1931-10-03T11:00-03:00至-02:00的间隙]

过渡段【1932-04-01T00:00-02:00至-03:00重叠】

过渡[1932-10-03T00:00-03:00至-02:00的间隙]

过渡段【1933-04-01T00:00-02:00至-03:00重叠】

过渡[1949-12-01T00:00-03:00至-02:00的间隙]

过渡段【1950-04-16T01:00-02:00至-03:00重叠】

过渡[1950-12-01T00:00-03:00至-02:00的间隙]

过渡段【1951-04-01T00:00-02:00至-03:00重叠】

过渡[1951-12-01T00:00-03:00至-02:00的间隙]

过渡段【1952-04-01T00:00-02:00至-03:00重叠】

过渡[1952-12-01T00:00-03:00至-02:00的间隙]

过渡[在1953-03-01T00:00-02:00至-03:00时重叠]

过渡[1963-10-23T00:00-03:00至-02:00的间隙]

过渡[在1964-03-01T00:00-02:00至-03:00时重叠]

过渡[1965-01-31T00:00-03:00至-02:00的间隙]

过渡[在1965-03-31T00:00-02:00至-03:00时重叠]

过渡[1965-12-01T00:00-03:00至-02:00时的间隙]

过渡段【1966-03-01T00:00-02:00至-03:00重叠】

过渡[1966-11-01T00:00-03:00至-02:00的间隙]

过渡段【1967-03-01T00:00-02:00至-03:00重叠】

过渡[1967-11-01T00:00-03:00至-02:00的间隙]

过渡[在1968-03-01T00:00-02:00至-03:00时重叠]

过渡[1985-11-02T00:00-03:00至-02:00的间隙]

过渡段【1986-03-15T00:00-02:00至-03:00重叠】

过渡[1986-10-25T00:00-03:00至-02:00时的间隙]

过渡段[1987-02-14T00:00-02:00至-03:00重叠]

过渡[1987-10-25T00:00-03:00至-02:00时的间隙]

过渡[在1988-02-07T00:00-02:00至-03:00时重叠]

过渡[1988-10-16T00:00-03:00至-02:00时的间隙]

过渡[在1989-01-29T00:00-02:00至-03:00时重叠]

过渡[间隙]
Instant instant = Instant.now() ;
ZoneOffsetTransition t = rules.nextTransition( instant );
Duration d = Duration.between( instant , t.getInstant() ) ;