java.time:CET时区是否考虑夏令时?

编程入门 行业动态 更新时间:2024-10-10 17:31:10
本文介绍了java.time:CET时区是否考虑夏令时?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我使用Java 8的新java.time实现,想知道将UTC输出到 CET 时间转换结果.

I use the new java.time implementation of Java 8 and wonder about the output of a UTC to CET time conversion result.

ZonedDateTime utcTime = ZonedDateTime.of(2014, 7, 1, 8, 0, 0, 0, ZoneId.of("UTC")); ZonedDateTime cetTime = ZonedDateTime.ofInstant(utcTime.toInstant(), ZoneId.of("CET")); System.out.println("Summer-UTC-Time: " + utcTime); System.out.println("Summer-CET-Time: " + cetTime); System.out.println(); utcTime = ZonedDateTime.of(2014, 1, 1, 8, 0, 0, 0, ZoneId.of("UTC")); cetTime = ZonedDateTime.ofInstant(utcTime.toInstant(), ZoneId.of("CET")); System.out.println("Winter-UTC-Time: " + utcTime); System.out.println("Winter-CET-Time: " + cetTime);

我希望CET时间始终是UTC时间的+1,但我却得到了:

I expected that the CET time would always be +1 of the UTC time but instead I got:

Summer-UTC-Time: 2014-07-01T08:00Z[UTC] Summer-CET-Time: 2014-07-01T10:00+02:00[CET] -> +2 **Unexpected** Winter-UTC-Time: 2014-01-01T08:00Z[UTC] Winter-CET-Time: 2014-01-01T09:00+01:00[CET] -> +1 Expected

因此,显然,我不得不处理夏令时,这是我在使用CET时所没有想到的. java.time CET实际上是 CEST 吗?如果是的话,如果我需要参加CET,应该使用哪个区域?

So apparently I have to deal with daylight saving time which I did not expect when using CET. Is the java.time CET in truth CEST? And if yes, what zone should I use if I need CET?

推荐答案

CET的IANA定义如下中欧的时区规则,其中包括冬季和夏季时间.可以在此处看到规则,这表明"CET"基于C-Eur" ,其中包括夏季时间.

The IANA definition of CET is that it follows the time-zone rules of Central Europe, which includes both winter and summer time. The rules can be seen here, which shows that "CET" is based on "C-Eur" which includes summer time.

在java.time中,您还可以看到完整的规则集:

In java.time you can also see the full set of rules:

ZoneId zone = ZoneId.of("CET"); System.out.println(zone); System.out.println(zone.getRules()); for (ZoneOffsetTransition trans : zone.getRules().getTransitions()) { System.out.println(trans); } for (ZoneOffsetTransitionRule rule : zone.getRules().getTransitionRules()) { System.out.println(rule); }

打印:

CET ZoneRules[currentStandardOffset=+01:00] Transition[Gap at 1916-04-30T23:00+01:00 to +02:00] Transition[Overlap at 1916-10-01T01:00+02:00 to +01:00] Transition[Gap at 1917-04-16T02:00+01:00 to +02:00] Transition[Overlap at 1917-09-17T03:00+02:00 to +01:00] Transition[Gap at 1918-04-15T02:00+01:00 to +02:00] Transition[Overlap at 1918-09-16T03:00+02:00 to +01:00] Transition[Gap at 1940-04-01T02:00+01:00 to +02:00] Transition[Overlap at 1942-11-02T03:00+02:00 to +01:00] Transition[Gap at 1943-03-29T02:00+01:00 to +02:00] Transition[Overlap at 1943-10-04T03:00+02:00 to +01:00] Transition[Gap at 1944-04-03T02:00+01:00 to +02:00] Transition[Overlap at 1944-10-02T03:00+02:00 to +01:00] Transition[Gap at 1945-04-02T02:00+01:00 to +02:00] Transition[Overlap at 1945-09-16T03:00+02:00 to +01:00] Transition[Gap at 1977-04-03T02:00+01:00 to +02:00] Transition[Overlap at 1977-09-25T03:00+02:00 to +01:00] Transition[Gap at 1978-04-02T02:00+01:00 to +02:00] Transition[Overlap at 1978-10-01T03:00+02:00 to +01:00] Transition[Gap at 1979-04-01T02:00+01:00 to +02:00] Transition[Overlap at 1979-09-30T03:00+02:00 to +01:00] Transition[Gap at 1980-04-06T02:00+01:00 to +02:00] Transition[Overlap at 1980-09-28T03:00+02:00 to +01:00] Transition[Gap at 1981-03-29T02:00+01:00 to +02:00] Transition[Overlap at 1981-09-27T03:00+02:00 to +01:00] Transition[Gap at 1982-03-28T02:00+01:00 to +02:00] Transition[Overlap at 1982-09-26T03:00+02:00 to +01:00] Transition[Gap at 1983-03-27T02:00+01:00 to +02:00] Transition[Overlap at 1983-09-25T03:00+02:00 to +01:00] Transition[Gap at 1984-03-25T02:00+01:00 to +02:00] Transition[Overlap at 1984-09-30T03:00+02:00 to +01:00] Transition[Gap at 1985-03-31T02:00+01:00 to +02:00] Transition[Overlap at 1985-09-29T03:00+02:00 to +01:00] Transition[Gap at 1986-03-30T02:00+01:00 to +02:00] Transition[Overlap at 1986-09-28T03:00+02:00 to +01:00] Transition[Gap at 1987-03-29T02:00+01:00 to +02:00] Transition[Overlap at 1987-09-27T03:00+02:00 to +01:00] Transition[Gap at 1988-03-27T02:00+01:00 to +02:00] Transition[Overlap at 1988-09-25T03:00+02:00 to +01:00] Transition[Gap at 1989-03-26T02:00+01:00 to +02:00] Transition[Overlap at 1989-09-24T03:00+02:00 to +01:00] Transition[Gap at 1990-03-25T02:00+01:00 to +02:00] Transition[Overlap at 1990-09-30T03:00+02:00 to +01:00] Transition[Gap at 1991-03-31T02:00+01:00 to +02:00] Transition[Overlap at 1991-09-29T03:00+02:00 to +01:00] Transition[Gap at 1992-03-29T02:00+01:00 to +02:00] Transition[Overlap at 1992-09-27T03:00+02:00 to +01:00] Transition[Gap at 1993-03-28T02:00+01:00 to +02:00] Transition[Overlap at 1993-09-26T03:00+02:00 to +01:00] Transition[Gap at 1994-03-27T02:00+01:00 to +02:00] Transition[Overlap at 1994-09-25T03:00+02:00 to +01:00] Transition[Gap at 1995-03-26T02:00+01:00 to +02:00] Transition[Overlap at 1995-09-24T03:00+02:00 to +01:00] Transition[Gap at 1996-03-31T02:00+01:00 to +02:00] Transition[Overlap at 1996-10-27T03:00+02:00 to +01:00] Transition[Gap at 1997-03-30T02:00+01:00 to +02:00] Transition[Overlap at 1997-10-26T03:00+02:00 to +01:00] TransitionRule[Gap +01:00 to +02:00, SUNDAY on or after MARCH 25 at 02:00 STANDARD, standard offset +01:00] TransitionRule[Overlap +02:00 to +01:00, SUNDAY on or after OCTOBER 25 at 02:00 STANDARD, standard offset +01:00]

此处的关键是要了解时区标识符和短名称" 是两个不同的元素.标识符始终固定为"CET",但名称在"CET"和"CEST"之间更改.

The key here is to understand that the time-zone identifier and the "short name" of that identifier are two different elements. The identifier is always fixed as "CET", but the name changes between "CET" and "CEST".

更多推荐

java.time:CET时区是否考虑夏令时?

本文发布于:2023-11-23 20:14:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1622752.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:夏令时   时区   java   time   CET

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!