2 pontos por GN⁺ 2024-12-27 | 1 comentários | Compartilhar no WhatsApp
  • Segundos desde a Epoch

    • Costuma-se dizer que o tempo POSIX, ou tempo Unix, significa os segundos desde 1º de janeiro de 1970 00:00:00. No entanto, isso não é exato. Por exemplo, o tempo POSIX de 2024-12-25 18:54:53 UTC é 1735152686, o que na verdade é 29 segundos menor do que os 1735152715 segundos efetivamente decorridos.

    • O tempo POSIX é derivado do Tempo Universal Coordenado (UTC) na IEEE 1003.1. A norma assume que todo dia tem exatamente 86.400 segundos. Porém, na prática, a duração de um dia não é 86.400 segundos e varia ao longo do tempo. Para ajustar isso, astrônomos periodicamente declaram segundos intercalares no UTC.

  • Arqueologia

    • O apêndice B da IEEE 1003 inclui uma discussão interessante sobre segundos intercalares. Quando a norma foi publicada, 14 segundos intercalares já haviam sido adicionados desde 1º de janeiro de 1970. Esses segundos intercalares são ignorados para facilitar o cálculo de diferenças de tempo.

    • A maioria dos sistemas trata o tempo como um valor que aumenta continuamente. Porém, a maioria dos sistemas não rastreia segundos intercalares nem está sincronizada com uma referência de tempo padrão. Assim, a exigência de que os segundos desde a época representem com exatidão os segundos entre a hora de referência e a época é inadequada.

    • Uma interpretação consistente dos segundos desde a época pode ser importante para certos tipos de aplicações distribuídas. O acúmulo de segundos intercalares é imprevisível, e o número de segundos intercalares desde a época provavelmente aumentará.

  • O que fazer em vez disso

    • Para calcular a duração entre dois eventos no mesmo computador, deve-se usar CLOCK_MONOTONIC. Se não houver necessidade de trocar tempo POSIX com outros sistemas, pode-se usar TAI, GPS ou LORAN.

    • Se for necessário um alinhamento aproximado com o sistema de timestamps POSIX, é possível distribuir os segundos intercalares por uma janela de tempo mais longa. Bibliotecas como qntm t-a-i oferecem suporte à conversão entre POSIX e TAI.

    • Há esforços em andamento para eliminar os segundos intercalares, com a expectativa de concluir isso até 2035. Isso exigirá trabalho adicional para construir tabelas de conversão para tudo o que assume "86.400 segundos por dia", mas tornará mais simples perguntar quantos segundos há entre dois instantes. Pelo menos para tempos após 2035.

1 comentários

 
GN⁺ 2024-12-27
Comentários do Hacker News
  • Li o livro de ficção científica "A Deepness in the Sky". Achei interessante a menção a segundos desde a época no livro

    • O método de medição de tempo dos Qeng Ho era complexo, e eles começavam a contar os segundos a partir do momento em que os humanos pisaram na Lua pela primeira vez
    • O instante inicial era, na verdade, cerca de 15 milhões de segundos depois, e esse era o segundo 0 do sistema operacional inicial
  • Há um esforço em andamento para eliminar os segundos intercalares, com a esperança de concluí-lo até 2035

    • O objetivo do UTC é ficar a um número inteiro de segundos do TAI para aproximar o tempo solar médio
    • Se você não quiser acompanhar o MST, precisa mudar para TAI; se o UTC se afastar do MST, os segundos intercalares históricos perdem o sentido
  • A "época UTC" moderna é 1º de janeiro de 1972

    • No fim de 1971, houve um salto irregular de 0,107758 segundo TAI, e depois disso a velocidade dos ticks do UTC foi alterada para corresponder exatamente ao TAI
    • O tempo Unix de 1970 e 1971 na verdade não corresponde ao tempo UTC real daquele período
  • Sempre aprendo algo novo quando leio sobre medição do tempo

    • Eu achava que o tempo Unix era a forma mais simples de rastrear o tempo
    • Eu pensava que segundos intercalares não se aplicavam, mas acho que não tinha refletido o suficiente sobre isso
  • Recentemente trabalhei em código para VAX, ou executado sobre OpenVMS, e foi a primeira vez que vi uma época em 17 de novembro de 1858

    • No código, isso estava abstraído como época Unix
  • Alguns instantes no tempo não podem ser representados como timestamps POSIX, e alguns timestamps POSIX não correspondem a um tempo real

  • Acho que este artigo estragou meu Natal

    • Segundos deveriam ser apenas segundos desde a época, e não deveria importar se eles se desviam do dia solar
    • O conversor entre segundos e época é que deveria cuidar dos ajustes
  • Ao armazenar datas no banco de dados, sempre salvo como tempo de época Unix, e a informação de fuso horário fica separada

    • Estou pensando se seria melhor armazenar timestamps no formato TAI e converter para UTC quando necessário
    • Fusos horários são um conceito criado por humanos e ajustado ao longo do tempo
    • Deve-se usar o tempo absoluto como base e converter para formato de hora local quando preciso
  • Cerca de 10 anos atrás, ouvi em uma conferência que o Google não usa segundos intercalares e os distribui ao longo de segundos normais

    • O Google modifica seus servidores NTP para espalhar o segundo intercalar
  • Fico me perguntando se existe uma forma de medição do tempo que seja sincronizada e monotonicamente crescente