Estou no fuso horário +07:00.
Dado isto:
ZonedDateTime.of( LocalDateTime.of( 1899, 12, 31, 23, 9, 20, 0 ), ZoneOffset.UTC )
.withZoneSameInstant( ZoneId.of( "Europe/Paris" ) )
Produziria:1899-12-31T23:18:41+00:09:21[Europe/Paris]
Por outro lado:
ZonedDateTime.of( LocalDateTime.of( 1899, 12, 31, 23, 9, 20, 0 ), ZoneOffset.UTC )
.withZoneSameInstant( ZoneId.of( "GMT+1" ) )
Produziria:1900-01-01T00:09:20+01:00[GMT+01:00]
Por que eles são diferentes, já que ambos ZoneId.of( "Europe/Paris" ).getRules().getOffset( LocalDateTime.now() )
e ZoneId.of( "GMT+1" ).getRules().getOffset( LocalDateTime.now() )
produzem +01:00
? Espero que a primeira tentativa dê 1900-01-01T00:09:20+01:00[Europe/Paris]
. BTW, onde estão os +00:09:21
na primeira tentativa?
Você está correto
Europe/Paris
eGMT+1
tem o mesmo deslocamento agora (2025-02-09), mas eles não tinham o mesmo deslocamento em 1899.Vamos imprimir os deslocamentos que
Instant
você realmente está interessado,Isto imprime
Foi daí que veio +00:09:21. Paris não padronizou seus fusos horários até 1911. São 9 minutos e 21 segundos à frente do GMT porque Paris fica a leste de Greenwich por esse tempo. Isso é deslocado do GMT do horário médio local de Paris.
O deslocamento do fuso horário
Europe/Paris
mudou muito ao longo da história. Veja a Wikipedia para mais detalhes. Ou você pode simplesmente imprimirA resposta do Sweeper está correta e inteligente. Vou apenas acrescentar algumas ideias.
O rastreamento de fusos horários é muito novo
Conforme sugerido na outra resposta, vamos analisar o histórico de mudanças no offset usado pela população da região de Paris, conforme decidido por seus políticos.
Descobrimos que a região de Paris usou quatro compensações em vários momentos:
Sua suposição de que o horário de Paris sempre usa um deslocamento de +01:00 (GMT+1) está incorreta.
Vemos que o rastreamento de fuso horário para esta região é rastreado apenas até 1911. Antes da era das ferrovias, havia pouca necessidade de inventar uma “zona” de tempo. O único horário que importava era o horário natural óbvio: meio-dia é quando o sol está diretamente acima, onde quer que você esteja. O meio-dia chega mais cedo no leste antes de chegar no oeste.
Conforme observado na Wikipedia , em 1891 o tempo foi unificado na França Metropolitana por meio do Meridiano de Paris que atravessa o Observatório de Paris em Paris, França. Essa linha meridiana acontece de ser ≈ 2°20′ a leste do meridiano de Greenwich usado por nossa definição contemporânea de fusos horários usando UTC. Essa distância longitudinal de 2°20′ significa que o sol está diretamente acima dos parisienses cerca de 9 minutos e 21 segundos antes de o sol chegar diretamente acima dos londrinos. E assim o primeiro deslocamento francês para Paris foi definido como +00:00 à frente do Meridiano de Paris. Hoje em dia, nossa definição moderna de fuso horário oficial para essa era
Europe/Paris
é +00:09:21 à frente do meridiano UTC para contabilizar a diferença de 2°20′. Isso explica o deslocamento visto em seus resultados.Tudo isso é uma maneira prolixa de dizer que tentar usar fusos horários fora dos tempos contemporâneos faz pouco ou nenhum sentido:
Chocantemente, apesar de todas as nossas muitas universidades e agências governamentais, ninguém se preocupou em identificar os fusos horários e rastrear as mudanças em seus deslocamentos. Somente em nossa vida (de cabelos grisalhos) Arthur David Olson heroicamente empreendeu um banco de dados formal de fusos horários, com a responsabilidade passando para Paul Eggert em 2005. Seus esforços geralmente se concentraram em 1970 e depois, com edições, adições, correções e mudanças acontecendo várias vezes ao ano no que agora chamamos de tzdata .
Portanto, sua tentativa de representar precisamente um momento de 1899 não é sensata.
OffsetDateTime
Vamos analisar seu código.
Embora não seja crítico, seu uso de
ZonedDateTime
na primeira parte é enganoso. Você está atribuindo um mero deslocamento em vez de um fuso horário. Então você deveria ter usadoOffsetDateTime
.Mas, como discutido acima, usar
OffsetDateTime
ouZonedDateTime
para momentos históricos geralmente não é sensato. Seu uso sugere uma precisão e autoridade que não são possíveis, e provavelmente desnecessárias.Definições:
+
para significar ahead of the meridian e-
para significar behind the meridian , embora tenha cuidado, alguns protocolos fazem o oposto.Continent/Region
,Europe/London
,Europe/Paris
,America/Edmonton
,Pacific/Auckland
etc.