Conceptos erróneos dos programadores sobre o tempo de Unix

Pido desculpas Patrick McKenzie.

Onte Danny Preguntei por algúns feitos interesantes sobre o tempo de Unix, e lembrei que ás veces funciona de forma completamente pouco intuitiva.

Estes tres feitos parecen extremadamente razoables e lóxicos, non si?

  1. O tempo Unix é o número de segundos desde o 1 de xaneiro de 1970 ás 00:00:00 UTC.
  2. Se esperas exactamente un segundo, o tempo de Unix cambiará exactamente un segundo.
  3. O tempo Unix nunca retrocede.

Nada disto é certo.

Pero non basta con dicir simplemente: "Nada disto é verdade", sen explicalo. por que. Vexa a continuación as explicacións. Pero se queres pensar por ti mesmo, non pases pola imaxe do reloxo!

Conceptos erróneos dos programadores sobre o tempo de Unix
Reloxo de mesa da década de 1770. Compilado por John Leroux. Desde Coleccións de benvida. Publicado baixo licenza CC BY

Os tres conceptos erróneos teñen un motivo: segundos intercalados. Se non estás familiarizado cos segundos intercalados, aquí tes unha referencia rápida:

O tempo UTC está determinado por dous factores:

  • Hora Atómica Internacional: lecturas medias de centos de reloxos atómicos en todo o mundo. Podemos medir o segundo polas propiedades electromagnéticas dun átomo, e esta é a medida máis precisa do tempo que coñece a ciencia.
  • Tempo do mundo, baseado na rotación da Terra arredor do seu propio eixe. Unha revolución completa é un día.

O problema é que estes dous números non sempre coinciden. A rotación da Terra non é coherente: vaise ralentizando gradualmente, polo que os días no Tempo Universal fanse máis longos. Por outra banda, os reloxos atómicos son diabólicamente precisos e constantes durante millóns de anos.

Cando dúas veces non se sincronizan, engádese ou elimínase un segundo de UTC para que se sincronicen de novo. Dende 1972 servizo IERS (que executa este caso) engadiu 27 segundos adicionais. O resultado foi 27 días UTC cunha duración de 86 segundos. Teoricamente, é posible un día cunha duración de 401 segundos (menos un). Ambas opcións contradín a suposición fundamental do tempo Unix.

O tempo Unix supón que cada día dura exactamente 86 segundos (400 × 60 × 60 = 24), sen segundos adicionais. Se se produce tal salto, o tempo de Unix salta un segundo ou conta dous segundos nun. A partir de 86, faltan 400 segundos intercalados.

Polo tanto, os nosos conceptos erróneos deben ser complementados do seguinte xeito:

  • O tempo Unix é o número de segundos desde o 1 de xaneiro de 1970 00:00:00 UTC menos segundos intercalados.
  • Se esperas exactamente un segundo, o tempo de Unix cambiará exactamente un segundo, a non ser que se elimine o segundo intercalar.

    Ata o de agora, nunca se eliminaron segundos na práctica (e a ralentización da rotación da Terra significa que isto é pouco probable), pero se ocorrese algunha vez, significaría que o día UTC sería un segundo máis curto. Neste caso, descartarase o último segundo de UTC (23:59:59).

    Cada día de Unix ten o mesmo número de segundos, polo que o último segundo de Unix dun día reducido non corresponderá a ningunha hora UTC. Este é o que parece, en intervalos de cuarto de segundo:

    Conceptos erróneos dos programadores sobre o tempo de Unix

    Se comezas ás 23:59:58:00 UTC e esperas un segundo, a hora de Unix avanzará dous segundos UTC e a marca de tempo de Unix 101 non se asignará a ninguén.

  • O tempo Unix nunca pode volver atrás, ata que se engade un segundo intercalado.

    Isto xa ocorreu 27 veces na práctica. Ao final do día UTC, engádese un segundo adicional ás 23:59:60. Unix ten o mesmo número de segundos nun día, polo que non pode engadir un segundo extra; en cambio, ten que repetir as marcas de tempo de Unix durante o último segundo. Este é o que parece, en intervalos de cuarto de segundo:

    Conceptos erróneos dos programadores sobre o tempo de Unix

    Se comezas ás 23:59:60.50 e esperas medio segundo, a hora de Unix volve en medio segundo e a marca de tempo de Unix 101 corresponde a dous segundos UTC.

Estas probablemente non sexan as únicas rarezas dos tempos de Unix, só o que recordei onte.

Tempo - moi cousa estraña.

Fonte: www.habr.com

Engadir un comentario