Idee sbagliate dei programmatori sul tempo Unix

scusarsi Patrick McKenzie.

ieri Danny Ho chiesto alcuni fatti interessanti sul tempo di Unix e mi sono ricordato che a volte funziona in modo del tutto non intuitivo.

Questi tre fatti sembrano estremamente ragionevoli e logici, non è vero?

  1. L'ora Unix è il numero di secondi trascorsi dal 1 gennaio 1970 alle 00:00:00 UTC.
  2. Se aspetti esattamente un secondo, l'ora Unix cambierà esattamente di un secondo.
  3. Il tempo di Unix non va mai indietro.

Niente di tutto questo è vero.

Ma non basta dire semplicemente: “Niente di tutto questo è vero”, senza spiegare. perché. Vedi sotto per le spiegazioni. Ma se vuoi pensare con la tua testa, non scorrere oltre l'immagine dell'orologio!

Idee sbagliate dei programmatori sul tempo Unix
Orologio da tavolo del 1770. Compilato da John Leroux. Da Benvenute collezioni. Pubblicato su licenza CC BY

Tutti e tre i malintesi hanno una ragione: secondi di salto. Se non hai familiarità con i secondi intercalari, ecco un rapido riferimento:

L'ora UTC è determinata da due fattori:

  • Ora atomica internazionale: Letture medie di centinaia di orologi atomici in tutto il mondo. Possiamo misurare il secondo mediante le proprietà elettromagnetiche di un atomo, e questa è la misurazione del tempo più precisa conosciuta dalla scienza.
  • Tempo del mondo, basato sulla rotazione della Terra attorno al proprio asse. Una rivoluzione completa è un giorno.

Il problema è che questi due numeri non sempre corrispondono. La rotazione della Terra non è coerente: rallenta gradualmente, quindi i giorni nel Tempo Universale si allungano. D’altro canto, gli orologi atomici sono diabolicamente accurati e costanti per milioni di anni.

Quando due orari non sono sincronizzati, un secondo viene aggiunto o rimosso dall'UTC per riportarli in sincronia. Dal 1972 in servizio IERS (che gestisce questo caso) ha aggiunto 27 secondi extra. Il risultato è stato di 27 giorni UTC con una durata di 86 secondi. Teoricamente è possibile un giorno con una durata di 401 secondi (meno uno). Entrambe le opzioni contraddicono il presupposto fondamentale del tempo Unix.

L'ora Unix presuppone che ogni giorno duri esattamente 86 secondi (400 × 60 × 60 = 24), senza secondi aggiuntivi. Se si verifica un tale salto, il tempo Unix salta di un secondo o conta due secondi in uno. Nel 86 mancano 400 secondi intercalari.

Quindi le nostre idee sbagliate devono essere integrate come segue:

  • L'ora Unix è il numero di secondi trascorsi dal 1 gennaio 1970 alle 00:00:00 UTC meno i secondi intercalari.
  • Se aspetti esattamente un secondo, l'ora Unix cambierà esattamente di un secondo, a meno che il secondo intercalare non sia stato rimosso.

    Fino ad ora, in pratica, i secondi non sono mai stati rimossi (e il rallentamento della rotazione terrestre rende ciò improbabile), ma se mai accadesse, significherebbe che il giorno UTC diventerebbe più breve di un secondo. In questo caso viene scartato l'ultimo secondo dell'UTC (23:59:59).

    Ogni giorno Unix ha lo stesso numero di secondi, quindi l'ultimo secondo Unix di un giorno abbreviato non corrisponderà ad alcuna ora UTC. Ecco come appare, a intervalli di un quarto di secondo:

    Idee sbagliate dei programmatori sul tempo Unix

    Se inizi alle 23:59:58:00 UTC e aspetti un secondo, l'ora Unix avanzerà di due secondi UTC e il timestamp Unix 101 non verrà assegnato a nessuno.

  • Il tempo di Unix non può mai tornare indietro, finché non viene aggiunto un secondo intercalare.

    Ciò è già successo 27 volte nella pratica. Alla fine della giornata UTC, viene aggiunto un ulteriore secondo alle 23:59:60. Unix ha lo stesso numero di secondi in un giorno, quindi non può aggiungere un secondo in più, deve invece ripetere i timestamp Unix per l'ultimo secondo. Ecco come appare, a intervalli di un quarto di secondo:

    Idee sbagliate dei programmatori sul tempo Unix

    Se inizi alle 23:59:60.50 e aspetti mezzo secondo, l'ora Unix sta tornando di mezzo secondo e il timestamp Unix 101 corrisponde a due secondi UTC.

Queste probabilmente non sono le uniche stranezze dei tempi di Unix, proprio quelle che ricordavo ieri.

Tempo - molto cosa strana.

Fonte: habr.com

Aggiungi un commento