Prima o poi, ogni programmatore deve affrontare i fusi orari.
E non posso davvero offrire molti consigli qui; posso offrire un avvertimento.
Posso dirti perchè tu non dovresti davvero mai e poi mai affrontare i fusi orari se possibile.
Immaginiamo che qualcuno abbia costruito un applicazione
che ti lascia calcolare quanti secondi qualcosa è nel passato.
Tu inserisci una data e un tempo e ti da il numero di secondi.
E la guardano e pensano "OK, quello più o meno funziona per me..."
"Ma aggiungiamo un piccolo quadratino che ti lascia cambiare il fuso orario"
Quindi se stai comparando tra adesso a New York e 5 giorni fa a Londra, puoi calcolarlo.
E quello va bene, la piccola tendina ti lascia cambiare quale ora in avanti o indietro sei rispetto a Greenwich.
Fantastico.
Prima o poi, dopo che diventa un pò popolare, riceveranno una chiamata dall' Australia.
E l' Australia dirà "G'day"
non proverò a fare gli accenti.
Io non dovrei fare accenti.
L' Australia dirà "Ciao!"
"Comunque, noi siamo 9½ ore davanti di Greenwich."
E il programmatore dirà "davvero?"
"Si, 9½ ore."
"OK, aggiungerò un caso speciale per te. Va bene."
Un pò più tardi, qualcuno chiamerà dal Nepal.
E dirà "Ciao. Noi siamo 5¼ ore davanti a Greenwich."
E loro diranno "davvero?" "Si, siamo così da secoli! Si, 5¼ ore!"
Bene. Okay. E inseriranno un caso speciale. E magari consultano
una lista di fusi orari. La lista che ti dice
dove tutto è, e si assicureranno di supportare ogni fuso orario nel mondo.
E dopo arriva l' autunno.
E riceveranno una chiamata dall' Inghilterra.
E l' Inghilterra dirà "Scusa. Mhh, siamo fuori di un ora adesso, cosa sta succedendo?"
"Aspetta, l' orologio è appena cambiato!"
"Va bene - gestiamo anche quello."
"Abbiamo inserito una nota di quando l' ora legale cambia per noi!"
E l' Inghilterra dirà "No, vedi l'ora legale cambia una settimana prima da noi."
"é diverso a seconda di dove vivi."
"Noi regoliamo i nostri orologi indietro una settimana prima di voi."
E a quel punto
normalmente il programmatore inizierà a tenere la sua testa nelle sue mani
e realizzarà in che cosa si sono cacciati.
E va bene! Inseriranno quello
e supporteranno il fatto che ogni paese cambia orario in un giorno diverso.
Guarderanno il file che dice come fare ciò e lo copieranno dentro al programma.
E dopo riceveranno un' altra chiamata da qualcuno nell' emisfero meridionale che dirà
"Si noi non cambiamo un ora indietro nell' Autunno, cambiamo in avanti."
"La nostra primavera... è in novembre."
E a quel punto normalmente inizieranno a guardare nostalgicamente al loro intossicante di preferenza
e a chiedersi se dovrebbero avere una bevuta veloce prima di continuare ...
... e programmeranno anche quello.
E dopo riceveranno una chiamata da Samoa.
Nel Pacifico, nella linea dell' ora internazionale.
E la Samoa dirà "Hello!"
"Si abbiamo saltato un giorno l' altro anno."
E il programmatore dirà "cosa?"
"Si abbiamo saltato un giorno. Siamo passati dal 29 Dicembre 2011 al 31 Dicembre."
"Abbiamo cambiato da un lato della linea dell' ora internazionale, da essere ore e ore dietro Greenwich ...
... ad essere ore e ore davanti a Greenwich. Ci aiuta con gli scambi commerciali con l' Australia."
"Puoi prenderlo in considerazione quando calcoli quanti giorni e quanti secondi le cose sono nel passato?"
[ respirando profondamente ] Va bene, c' è un file che ti dice quando ogni paese ha cambiato il suo fuso orario.
E si scopre che ciò succede abbastanza frequentemente.
Ma viene annunciato in anticipo quindi finchè tieni quel file aggiornato
e lo programmi nella logica del tuo programma, sarà tutto apposto.
E dopo guardi indietro e ti accorgi che durante la seconda guerra mondiale,
L' Inghilterra aveva il doppio tempo estivo britannico.
Andava completamente nell' orario estivo e poi aggiungeva un ora extra.
Quindi era due ore davanti a Greenwich anche se... aveva Greenwich.
Va bene, supporterai anche quello.
Ti sei accorto che ho iniziato a parlare come se fosse tu o me?
Perchè ho già fatto questo ed è veramente, veramente frustante.
E farai attenzione di iscriverti alla lista
di quando i paesi cambieranno i loro fusi orari, che succede, apparentemente, molte volte!
Qualche volta, più volte all' anno perchè i governi cambiano di nuovo.
E dopo questo leggendario programmatore riceve una chiamata dalla Libya;
che nel 2013, con un preavviso di solo un paio di giorni, ha deciso di non rimettere gli orologi indietro.
Con abbastanza preavviso che non era possibile per nessuno fare un aggiornamento in abbastanza tempo.
Ciò significa che tutti i computer della Libya, a prescindere dal sistema operativo ...
... erano fuori tempo di un ora.
È OK, leggi la notizia e in fretta programmi ciò dentro al tuo programma.
E dopo, dopo ricevi una chiamata dalla West Bank.
Dove la popolazione di Israele è su un fuso orario diverso di quello della popolazione della Palestina.
Perchè una segue Israel e l' altra no.
Adesso hai due popolazioni di persone nello stesso luogo che seguono fusi orari diversi.
E ora tutti devono chiedersi se sono su questo fuso orario o su quest' altro, a seconda di chi sono e dove sono
E non c' è modo di programmarlo nel tuo programma! E dopo ...
Dopo ricevi una chiamata dallo storico.
Che dice "Ok, sto provando a calcolare delle date del 18° secolo."
" E abbiamo cambiato dal calendario giuliano a quello gregoriano."
"Non è che abbiamo perso tre settimane ...
... è che siamo passati da questa data a questa, e abbiamo perso le altre."
"Puoi programmarlo così me lo calcola?"
Va bene perchè qualcuno ti ha già detto quando sono quelle date,
e puoi anche programmarlo nella logica del tuo progamma
ma ora sembra molto lungo e molto complicato
ed è un pasticcio aggrovigliato di codice spaghetti che per qualche motivo funziona
e dopo ricevi una chiamata dallo storico russo!
Che dice "Si, abbiamo cambiato al calendario gregoriano solo nel 20° secolo ...
... e si scopre che le date che sono state saltate cambiano a seconda della posizione ...
... e puoi supportare anche questo?" E dopo ricevi una chiamata dallo storico britannico!
Che dice che prima, penso che fosse il 16° secolo ...
l' anno cominciava il 25 marzo!
Solo per farti rimanere a bocca aperta.
Da 24 marzo 1924
e dopo sarebbe stato 25 marzo 1925. E quello è il giorno dopo.
Perchè sei andato dal 31 dicembre 1924 al 1 gennaio 1924 perchè va in quell' ordine!
È immensamente complicato, E DOPO ...
Ricevi una chiamata dall' astrofisico ...
Che dice "Comunque, abbiamo appena saltato un secondo!"
E a questo punto, dici solamente "... cosa?!"
Secondi saltati; perchè la Terra non ruota ad una velocità costante.
Rallenta, accelera, mentre le placche tettoniche si muovono
e i campi magnetici cambiano, o più o meno. E così occasionalmente
l' unione astronomica internazionale (International Astronomical Union) calcolerà quando abbiamo bisogno di saltare un secondo.
Se si, gli orologi vanno così: 23:59:58
e dopo 23:59:59
e dopo invece di andare a 00:00:00 come ogni fuso orario andrebbe
va a 23:59:60!
E tutto si rompe perchè improvvisamente ci sono 61 secondi in un minuto!
Quindi a seconda della tua implementazione, o ...
... il tuo orologio diventa un secondo fuori sincrono con il resto del mondo
o ripete un secondo.
Il modo con qui dovresti approcciare questo è qualcosa chiamato il tempo Unix
E Numberphile, penso, ha già parlato di questo in passato.
Hai questo numero che parte esattamente il primo secondo del 1970
e aumenta di un secondo, al secondo.
Constantemente. Tick. Tick. Tick.
Ed è fantastico perchè cosa dovresti fare è prendere qualsiasi data ti è stata data,
e calcolare il tempo Unix,
e inserire quello nel tuo database.
E quello affronterà i secondi saltati
MA NON LO FA! Naturalmente non lo fà!
Perchè hai il tempo universale coordinato (Universal Coordinated Time)
che include i secondi saltati!
Si ripete occasionalmente, e include 23:59:60
e dopo c' è il tempo astronomico! Che non include i secondi saltati
e ha continuato ad andare fuori sincrono con il resto del mondo
perchè dobbiamo guardare alle stelle e costruire telescopi con quello!
[ sigh profondo ]
E cosa impari è che ...
Cosa impari dopo aver affrontato i fusi orari, cosa fai è che ...
... metti via il tuo codice ...
... non provi a scrivere niente per affrontare questo.
Guardi alle persone che c' erano prima di te.
Guardi alle prime persone, le persone che hanno affrontato questo in passato,
le persone che hanno fatto il codice spaghetti,
e li ringrazi molto per averlo fatto open source,
e gli dai credito, e poi prendi qualsiasi cosa abbiano fatto e la inserisci nel tuo programma,
e non lo guardi mai più.
Perchè è da pazzi.
Google ha un approccio molto, molto buono per i secondi saltati che si sono inventati da soli.
C' è un articolo a riguardo sul loro blog, penso, che lo spiega.
Fanno qualcosa chiamato "salto distribuito"
Perchè avere 61 secondi in un minuto,
o perchè avere un orologio tornare indietro un secondo,
può essere davvero terribile per grandissime aziende che devono
sincronizzare tutto molto precisamente e devono devono essere sicuri che un certo pezzo di dati è stato salvato prima di un altro,
essenzialmente distribuiscono il secondo saltato su tutto il giorno.
Aumentano i loro orologi di un microsecondo alla volta.
Tick tick tick, durante tutto il giorno.
Così che è, qualche volta magari anche mezzo secondo fuori dalla realtà,
ma finchè tutto nei loro server è fuori di mezzo secondo.
È fatto per essere fuori tempo con il mondo, finchè sa che quella cosa è successa prima di quell' altra.
Avere continuità e più importante che avere vero e proprio tempo accurato. [ sottotitoli fatti da Quei Due Soliti Nerd ]