Peço desculpas a
Patrick Mackenzie .
Danny perguntou ontem sobre fatos curiosos sobre o tempo no Unix, e lembrei-me de que às vezes funciona de maneira completamente não intuitiva.
Esses três fatos parecem ser extremamente razoáveis e lógicos, certo?
- Hora Unix é o número de segundos desde 1 de janeiro de 1970, 00:00:00 UTC.
- Se você esperar exatamente um segundo, o tempo do Unix mudará exatamente um segundo.
- O tempo Unix nunca se move para trás.
Tudo isso não é verdade.
Mas não basta dizer "Tudo isso é falso" sem explicar o
porquê . Veja abaixo uma explicação. Mas se você quiser pensar por si mesmo, não role o relógio!
Relógio de mesa dos anos 1770. Compilado por John Leroux. Da coleção de Wellcome . Publicado sob CC BYTodas as três falácias têm um motivo:
pular segundos . Se você não estiver familiarizado com segundos extras, aqui está uma referência rápida:
A hora UTC é determinada por dois fatores:
- Horário atômico internacional : leituras médias de centenas de relógios atômicos em todo o mundo. Podemos medir um segundo pelas propriedades eletromagnéticas de um átomo, e essa é a medida de tempo mais precisa conhecida pela ciência.
- Tempo universal , baseado na rotação da Terra em torno de seu próprio eixo. Uma volta completa - um dia.
O problema é que esses dois números nem sempre coincidem. A rotação da Terra não é consistente - está diminuindo gradualmente, de modo que o dia no Tempo Universal está ficando mais longo. Por outro lado, os relógios atômicos são diabolicamente precisos e constantes por milhões de anos.
Quando duas vezes caem da sincronização, um segundo é adicionado ou removido no UTC para restaurar a sincronização. Desde 1972, o serviço
IERS (que executa este caso) adicionou 27 segundos extras. O resultado foi 27 dias de UTC, com duração de 86.401 segundos. Teoricamente, é possível a aparência de um dia com duração de 86 399 segundos (menos um). Ambas as opções contradizem o pressuposto fundamental do tempo Unix.
O tempo Unix assume que todos os dias duram exatamente 86.400 segundos (60 × 60 × 24 = 86.400), sem segundos extras. Se esse salto ocorrer, o tempo do Unix aumentará após um segundo ou contando dois segundos em um. A partir de 2019, faltam 27 segundos bissextos.
Portanto, nossos erros devem ser complementados da seguinte maneira:
- A hora Unix é o número de segundos desde 1º de janeiro de 1970 00:00:00 UTC menos segundos bissextos .
- Se você esperar exatamente um segundo, o tempo do Unix mudará exatamente um segundo se o segundo extra não tiver sido excluído .
Até agora, na prática, segundos nunca foram removidos (e uma desaceleração na rotação da Terra significa que isso é improvável), mas se isso acontecer, isso significaria que o dia UTC era um segundo mais curto. Nesse caso, o último segundo do UTC (23:59:59) é descartado.
Todo dia Unix tem o mesmo número de segundos, portanto, o último segundo Unix de um dia reduzido não corresponderá a nenhum horário UTC. Aqui está o que parece em intervalos de quarto de segundo:

Se você iniciar às 23: 59: 58: 00 UTC e esperar um segundo, o horário do Unix avançará dois segundos no UTC e o carimbo de data e hora do Unix 101 não será atribuído a ninguém.
- O tempo Unix nunca pode voltar até que um segundo extra seja adicionado .
Isso já aconteceu 27 vezes na prática. No final do dia, o UTC adiciona um segundo adicional 23:59:60. Os dias do Unix têm o mesmo número de segundos, portanto, não é possível adicionar um segundo extra; em vez disso, você deve repetir os carimbos de hora do Unix pelo último segundo. Aqui está o que parece em intervalos de quarto de segundo:

Se você iniciar às 23: 59: 60.50 e esperar por meio segundo, o horário do Unix retornará por meio segundo e o carimbo de data e hora do Unix 101 corresponderá a dois segundos do UTC.
Provavelmente, essas não são as únicas esquisitices do tempo no Unix - exatamente o que eu lembrei ontem.
O tempo é uma coisa
muito estranha.