Skillbook Logo
foto profilo

Skill Factory

Lista post > 6. Competenze per programmare: date, ore e fusi orari

6. Competenze per programmare: date, ore e fusi orari

Gino Visciano | Skill Factory - 16/08/2024 11:59:36 | in Tutorials

Il tempo sulla Terra non è assoluto, ma relativo, quindi la sincronizzazione delle date e delle ore, nell'era della globalizzazione, può diventare una cosa complicata se non sono chiari alcuni concetti.

Il primo concetto fondamentale per gestire le date è il formato della data, perché ogni nazione o sistema informatico può adottare delle regole diverse.

I formati data più utilizzati dai sistemi informatici sono i seguenti:

1) MM/dd/yyyy;
2) yyyy/MM/dd;
3) dd/MM/yyyy.

dd=giorno
MM=mese
yyyy=anno
 
A volte, al posto del separatore slash "/", viene anche utilizzato il segno meno "-":
 
1) MM-dd-yyyy;
2) yyyy-MM-dd;
3) dd-MM-yyyy.
 
Il secondo formato: yyyy/MM/dd è utile per ordinare in modo crescente le date di tipo stringa.

Esempio 1

Inserire una data di tipo stringa, nel formato dd/MM/yyyy.
Estrarre la data il giorno, il mese e l'anno in forma numerica e stamparli.
Utilizzare il giorno, il mese e l'anno estratti per creare una data di tipo oggetto.
Dalla data di tipo oggetto estrarre la data il giorno, il mese e l'anno in forma numerica e stamparli.
Infine, utilizzando la data di tipo oggetto stampare le date nei formati seguenti:

1) MM-dd-yyyy;
2) yyyy-MM-dd;
3) dd-MM-yyyy.

Soluzione Python:
 
Soluzione JavaScript (node.js):
 
Prima di eseguire il programma assicurati di aver installato i moduli:
1) readline-sync
2) moment
 
Per installare i due moduli, devi eseguire i comanadi seguenti nella directory in cui è stato salvato il file gestione_date.js:
 
npm install readline-sync
npm install moment

 

Esempio 2

Creare un vettore con 5 date di tipo stringa.
Le date devono essere inserite nel formato dd/MM/yyyy.
Stampare le date in ordine crescente.  

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.

 

Esempio 3

Creare un vettore con 5 oggetti di tipo data.
Le date devono essere inserite nel formato dd/MM/yyyy.
Stampare le date in ordine crescente.  

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


Un altro concetto importante è quello di fuso orario, perché permette di sincronizzare l'ora degli eventi tra località molto distanti tra loro. L'ora locale di una località cambia in base alla longitudine in cui si trova, per questo motivo il tempo sulla Terra non è assoluto, ma è relativo; attraverso i fusi è possibile conoscere la differenza di orario che esiste tra due località diverse.  

Per chiarire i due concetti, facciamo un semplice esempio: immaginate che un amico di New York vi dà un appuntamento telefonico per il 10/05/2024 alle ore 11:00.

Per essere sicuri di quando riceverete la telefonata del vostro amico, dovete chiarire tre cose:

1) il formato della data indicata;
2) la città a cui fa riferimento l'ora indicata;
3) se è in vigore l'ora legale

In questo caso il problema dell'ora legale non c'è perché sia in America che in Italia va in vigore a marzo e termina a fine ottobre; quindi, l'ora legale non avrà nessun effetto sul fuso orario.

Allora vediamo quali sono gli altri casi possibili:

A.  Data espressa in formato  Europeo (dd/MM/yyyy) e ora di Roma

Questo è il caso più semplice, perché la telefonata del vostro amico di New York dovrebbe arrivare il 10 maggio 2024 alle ore 11:00.

B.  Data espressa in formato  Europeo (dd/MM/yyyy) e ora di New York

In questo caso c'è il problema del fuso orario tra Roma e New York. La longitudine (meridiano) di New York è diversa da quella della città di Roma, quindi, l'ora di New York è di 6 ore indietro rispetto a quella di Roma.

A causa del fuso orario, la telefonata del vostro amico di New York dovrebbe arrivare il 10 maggio 2024 alle ore 17:00.

C.  Data espressa in formato  USA (MM/dd/yyyy) e ora di Roma

Il formato USA prevede che nella data venga indicato prima il mese e poi il giorno; in questo caso la telefonata del vostro amico di New York dovrebbe arrivare il 5 ottobre 2024 alle ore 11:00.
 
D.  Data espressa in formato  USA (MM/dd/yyyy) e ora di New York
 

In questo caso considerando il formato USA della data e il fuso orario di New York, otteniamo che la telefonata del vostro amico di New York dovrebbe arrivare il 5 ottobre 2024 alle ore 17:00.

sistemi informatici, per allineare le date e le ore tra località del mondo con longitudine diversa, usano le informazioni di Time zone, da cui si può ottenere il fuso orario e se è in vigore o meno l'ora legale.


Esempio 4

Stampare l'ora corrente di Roma.
Estrarre ore, minuti e secondi e stamparli.
Stampare il fuso orario con Greenwich.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


Esempio 5

Stampare la data e l'ora corrente e le informazioni di Time zone di Roma e di New York.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.

 

COME MISURIAMO IL TEMPO SULLA TERRA
La misura del tempo sulla Terra è una questione di giri ... Per questo motivo il tempo si misura in sessagesimi (sistema di misura in base 60).

Un giorno corrisponde al tempo impiegato dalla Terra per compiere un giro completo di 360°, intorno al proprio asse.

La Terra ruota in senso antiorario, da ovest (occidente/ponente) verso est (oriente/levante); per ogni ora che passa ruota di 15°, per questo motivo un giorno è composto da circa 24 ore, come mostra la formula seguente:

360° / 15° = 24 ore.

In base al sistema sessagesimale, le unità sono rappresentate dai secondi (simbolo ''). Ogni sessanta secondi s'incrementano di 1 i minuti (simbolo '). Ogni sessanta minuti s'incrementano di 1 le ore.

Per questo motivo il tempo sulla Terra si indica nel formato:

ore:minuti:secondi

oppure

hh:mm:ss  

1 ora  (rotazione Terra di 15°) = 60 minuti (60')

1 minuto (rotazione Terra di 0,25°) = 60 secondi (60'')

Quindi

1 ora = 60' = 3600''

1 giorno = 24 ore = 1440' = 86400''

Anche le lancette dell'orologio analogico, con cui misuriamo il tempo, girano.

Un orologio non è altro che un contatore sessagesimale

Per ogni giro completo (360°) della Terra intono al proprio asse, che si completa in circa 24 ore:

1) la lancetta dei secondi ruota intorno al quadrate dell'orologio per 1440 volte. 
2) la lancetta dei minuti ruota intorno al quadrate dell'orologio per 24 volte;
1) la lancetta delle ore ruota intorno al quadrate dell'orologio per 2 volte;


Esempio 6

Visualizzare le seguenti informazioni sulla rotazione della Terra:
1) Data e ora di Greenwich con fuso orario
2) Data e ora di Roma con fuso orario
3) Differenza di fuso orario tra Roma e Greenwich
4) Percentuale di rotazione della Terra prima di completare un giro
5) Percentuale di rotazione della Terra per completare un giro

 

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


LATITUDINE E LONGITUDINE
La posizione di qualunque località o punti sulla Terra si può indicare attraverso due coordinate chiamate: Latitudine e Longitudine.

Ad esempio, la città di Roma ha le seguenti coordinate:

Latitudine: 41°53′57.12″ nord
Longitudine: 12°32′42.00″ est.

Mentre la città di Brasilia ha le seguenti coordinate:

Latitudine: 15°46′46″ sud
Longitudine: 47°55′46″ ovest

Potete immaginare la latitudine come il cerchio perpendicolare all'asse terrestre e parallelo all'equatore che passa per una località specifica. Per convenzione la latitudine è Nord se il cerchio si trova nella parte tra l'equatore e il polo Nord (emisfero Boreale), altrimenti è Sud, se il cerchio si trova tra l'equatore e il polo Sud (emisfero Australe).

I cerchi che indicano le latitudini da 0° a 90°, distanziati di 1° l'uno dall'altro, sono detti paralleli. Si contano 90 paralleli a Nord e 90 a Sud

il parallelo 0 coincide con l'equatore, quindi in totale i paralleli sono 181. Sulle mappe si indica un parallelo solo ogni 15°, quindi ci sono 12 paralleli a Nord e 12 a Sud, oltre l'equatore naturalmente.

Allo stesso modo, potete immaginare la longitudine come un semicerchio parallelo all'asse terrestre e perpendicolare all'equatore che unisce il polo Nord con il polo Sud e passa per una località specifica. 

I semicerchi che indicano le longitudini, distanziati di 1° l'uno dall'altro, sono detti meridiani. I meridiani sono 360; quello più importante è il meridiano 0

Verso la fine del 1800, i Paesi più importanti del mondo, decisero che il meridiano 0 dovesse essere quello che passava per  Greenwich, un distretto di Londra in Inghilterra, sulle sponde del fiume Tamigi. Per convenzione le località a destra del meridiano 0 hanno longitudine Est, quelle a sinistra hanno longitudine Ovest

Sulle mappe si indica un meridiano ogni 15°, quindi ci sono solo 24 meridiani identificati con i numeri da 0 a 23. Questi meridiani sono anche detti meridiani orari, perché a causa della rotazione della Terra, ciascun meridiano, partendo da quello 0 a quello 23, incontra il Sole alle ore 12:00:00, dopo ogni ora. 

I meridiani orari permettono di definire i fusi orari, fondamentali per stabilire l'ora locale di ogni località del mondo.


Esempio 7

Inserire la latitudine e la longitudine di una località e indicare tra quali paralleli e quali meridiani si trova.

Soluzione Python:

 
Soluzione JavaScript (node.js):

CHE COS'E' IL FUSO ORARIO
Quando parliamo di misura del tempo sulla Terra, dobbiamo ricordare che non sono importanti i paralleli (cerchi paralleli all'equatore, con latitudine da 1 a 90 gradi dell'emisfero Nord e Sud), ma sono fondamentali i meridiani (i 360 semicerchi che unisco, il polo Nord con il polo Sud, a 1° di longitudine l'uno dall'altro), in particolare quelli orari (i 24 meridiani a 15° di longitudine l'uno dall'altro), perché permettono di determinare i fusi orari che servono per calcolare l'ora locale di qualunque località del mondo.

Sappiamo che un giorno corrisponde al tempo impiegato dalla Terra per compiere un giro completo di 360° intorno al proprio asse. Il problema è che le località del mondo si trovano in posizioni diverse; quindi, per misurare il tempo sulla Terra è importante scegliere una località specifica, da usare come riferimento.

Per convenzione si è deciso di utilizzare come località di riferimento per misurare il tempo sulla Terra il distretto di Greenwich, che corrisponde al meridiano zero o longitudine zero. Il tempo s'inizia a contare quando questa località incontra il Sole (punto fisso della volta celeste) alle ore 12:00:00. 

Ogni volta che Greenwich compie un giro completo, sul nostro Pianeta sarà trascorso un giorno. Quindi l'ora locale di Greenwich, detta anche Greenwich Mean Time, abbreviato in GMT, è l'ora di riferimento da cui partire per calcolare le ore locali delle altre località del mondo, utilizzando i fusi orari.

Per ottenere l'ora locale di qualunque località del mondo basta usare la formula seguente:

OL = GMT + FO

OL=ora locale della località in esame
GMT=Greenwich Mean Time
FO=Fuso orario della località in esame (Attenzione i fusi ad ovest del meridiano 0 sono negativi, quelli ad est sono positivi).

Naturalmente il fuso orario di Greenwich, che coincide con il meridiano 0, è uguale a zero.

Il valore del fuso orario aumenta di un'ora (+) ogni volta che s'incontra un nuovo meridiano orario, se si procede verso Est del meridiano 0. Altrimenti diminuisce di un'ora (-) ogni volta che s'incontra un nuovo meridiano orario, se si procede verso Ovest del meridiano 0, come mostra l'immagine seguente:

Ad esempio, quando a Greenwich sono le 12:00 a Roma sono le 13:00, perché Roma si trova sul primo meridiano orario ad Est, di Greenwich, dove il fuso orario è uguale a +1. Anche a Parigi sono le 13:00, perché Roma e Parigi, hanno latitudini diverse, ma si trovano sulla stessa longitudine, quindi si trovano sullo stesso meridiano orario e il fuso orario è uguale.

L'Islanda, si trova sul primo meridiano orario ad Ovest di Greenwich; in questo caso il valore del fuso orario è uguale a -1. Quindi quando a Greenwich sono le 12:00, in Islanda sono le 11:00

La differenza tra i fusi orari di due località diverse, ci permette di conoscere le ore di differenza che ci sono tra le loro ore locali. Ad esempio, il fuso orario di Roma è +1, mentre quello di New York è -5. Questo significa che tra l'ora locale di Roma e quella di New York c'è una differenza di:

-5 - (+1) = -6 ore.

Quindi, quando a Roma sono le 12:00, a New York sono le 6:00 del mattino. 


DIFFERENZA TRA GMT E UTC
Il Tempo medio di Greenwich (GMT), come abbiamo visto è il tempo a cui bisogna far riferimento per calcolare l'ora locale di qualunque località del mondo utilizzando i fusi orari. Il GMT non è preciso perhcé è basato su fenomeni celesti e con il tempo deve essere corretto.

Oggi il GMT è stato sostituito dal Tempo Coordinato Universale (Coordinated Universal Time - UTC), conosciuto anche come tempo civile. Il nuovo nome è stato coniato per non dover menzionare una specifica località in uno standard internazionale. L'UTC si basa su misurazioni condotte da orologi atomici, quindi è molto più preciso del GMT.

A causa delle oscillazioni nella velocità di rotazione della Terra (il fenomeno è dovuto soprattutto alla gravità degli altri pianeti), il GMT ritarda costantemente rispetto al "tempo atomico" UTC. Il ritardo è mantenuto entro 0,9 secondi, aggiungendo o togliendo un  secondo ad UTC alla fine del mese quando necessario, convenzionalmente il 30 giugno o il 31 dicembre. Il secondo extra, detto intercalare è determinato dall'International Earth Rotation and Reference Systems Service (IERS), basandosi sulle loro misurazioni della rotazione terrestre.

L'UTC è un problema per i sistemi informatici che memorizzano le date come il numero di secondi passati rispetto ad una data antecedente, come ad esempio il sistema operativo  Unix, che memorizza la data come il numero di secondi passati dal 1° gennaio 1970. In questi casi diventa impossibile determinare la rappresentazione di una data futura, a causa dei secondi che potrebbero essere stati inseriti o sottratti nel frattempo.

L'UTC è il tempo usato per molti standard Internet e nel World Wide Web. In particolare, il Network Time Protocol è progettato come un modo per distribuire dinamicamente il tempo UTC attraverso Internet.

Il fuso orario UTC è a volte indicato dalla lettera 'Z', per scopi militari, meteorologici, di navigazione aeronavale militare e civile. Poiché l'alfabeto fonetico della NATO e dei radioamatori usa la parola "Zulu" per 'Z', UTC è a volte chiamato "tempo" o "orario Zulu".

Per ottenere l'ora locale di qualunque località del mondo, attraverso l'UTC, basta usare la formula seguente:

OL = UTC + FO

OL=ora locale della località in esame
UTC=Coordinated Universal Time
FO=Fuso orario della località in esame (Attenzione i fusi ad ovest del meridiano 0 sono negativi, quelli ad est sono positivi).


Esempio 8

Visualizzare la data e l'ora corrente e le informazioni di tutti i Time zone del mondo.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

 

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione


LO STANDARD ISO 8601
Per indicare le date e le ore in modo univoco in tutto il mondo, è stato creato lo standard ISO 8601. In Europa questo standard è anche conosciuto come EN 28601.

Lo scopo della norma ISO 8601, è quello di fornire indicazioni per i formati numerici di date e orari.

Secondo questo standard le data vanno espresse nel formato anno-mese-giorno, mentre gli orari nel formato ore-minuti-secondi. Tutte le indicazioni di orari, date o intervalli di tempo conformi alla norma ISO vengono indicati con una successione precisa: cominciano con l'unità più grande a cui segue sempre l'unità inferiore. Questo tipo di scrittura è noto anche come "scrittura decrescente".

Rappresentazione conforme all'ISO 8601  Valori
Anno (Y) YYYY, di quattro cifre, abbreviato in due
Mese (M) MM, da 01 a 12
Settimana (W) WW, da 01 a 53
Giorno (D) D, giorno della settimana, da 1 a 7
Ora (h) hh, da 00 a 23, 24:00:00 come orario finale
Minuti (m) mm, da 01 a 59
Secondi (s) ss, da 01 a 59
Frazioni decimali (f) Frazioni di secondo, precisioni facoltative

La data è l'ora nella stringa ISO, sono divise dalla lettera "T", ad esempio:

25 luglio 1980 ore 15:30:10 = "1980-07-25'T'15:30:10".

Dopo l'indicazione della data e dell'orario, spesso si esprime anche la differenza rispetto al tempo universale coordinato, abbreviato con la sigla UTC. In questo modo il formato tiene conto anche degli eventuali diversi fusi orari o dell'ora legale specifica di un paese.

Ad esempio, la stinga ISO seguente:

2020-11-16T04:25:03-05:00

indica la data e l'ora solare di una località ad Ovest di Greenwich (meridiano 0), perché c'è il segno meno, cinque ore prima dell'ora UTC; Il segno -/+ indica il numero di ore prima (Ovest) o dopo (Est) dell'ora UTC. 

Nel prossimo esempio, viene indicato valore della data e dell'ora per il 16 novembre 2020 alle 4:25:03 dell'ora UTC:

2020-11-16T04:25:03Z

La data viene specificata per prima, seguita dal valore T, che definisce l'inizio dell'elemento time. Il valore Z (Zulu) alla fine della stringa indica che l'ora è espressa in formato UTC.
 
L'ISO 8601 usa il calendario gregoriano, quindi il campo di applicazione degli anni in questo formato comprende soltanto gli anni che vanno dal 1583 al 9999 perché il calendario gregoriano è stato introdotto soltanto a partire dall'anno 1583.

Il calendario gregoriano è il calendario solare ufficiale adottato da quasi tutti i paesi del mondo. Fu introdotto da papa Gregorio XIII nel 1582 come correzione del precedente calendario giuliano (di epoca romana), il quale era sfasato di 11 minuti ogni anno solare. 

Il calendario giuliano aggiunge un giorno al calendario ogni 4 anni. Il calendario gregoriano fa lo stesso, tranne quando l'anno è divisibile per 100 e non divisibile per 400


Clicca qui per vedere  come facciamo in programmazione a capire se un anno è secolare e bisestile.


Esempio 9

Visualizzare la data e l'ora corrente e le informazioni del Time zone sia in formato standard, sia in formato ISO 8601.

Soluzione Python:

# Gestione date  e ore in formato ISO
import datetime as dt
dataObj=dt.datetime.now()
print("Data e ora: "+str(dataObj))
print("ISO 8601: "+dataObj.isoformat())

 

Soluzione JavaScript (node.js):

// Ottieni la data attuale
const dataObj = new Date();

console.log("Data e ora: " + dataObj.toString());
console.log("ISO 8601: " + dataObj.toISOString());


Esempio 10

Trasformare la data e l'ora corrente e le informazioni del Time zone da formato standard in formato ISO 8601.

Soluzione Python:

# Gestione date  e ore in formato ISO
import datetime as dt
dataObj = dt.datetime.now()
print(dataObj.strftime('%Y-%m-%dT%H:%M:%S.%f%z'))

Soluzione JavaScript (node.js):
 
const moment = require('moment');

// Ottieni la data attuale
const dataObj = moment();

// Formatta la data nel formato ISO richiesto
console.log(dataObj.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));


Esempio 11

Stampare in formato ISO 8601, le informazioni del Time zone UTC.
Sempre in formato ISO 8601, stampare anche le informazioni del Time zone Europe/Rome.
Infine, stampare la differenza di fuso orario tra l'ora locale di Roma e l'UTC.


Soluzione Python:

# Gestione date ISO
import datetime as dt
import pytz
dataObj = dt.datetime.now()
dataObjUTC=dataObj.astimezone(pytz.timezone("UTC"))
dataObjRM=dataObj.astimezone(pytz.timezone("Europe/Rome"))
print("Informazioni Time zone UTC: "+dataObjUTC.strftime('%Y-%m-%dT%H:%M:%S.%f%z'))
print("Informazioni Time zone Roma: "+str(dataObjRM.strftime('%Y-%m-%dT%H:%M:%S.%f%z')))
print("Offset tra fuso orario UTC e Roma: "+str(dataObjRM.utcoffset()))

Soluzione JavaScript (node.js):
 
const moment = require('moment-timezone');

// Ottieni la data attuale
const dataObj = moment();

// Converti in UTC
const dataObjUTC = dataObj.tz('UTC');
console.log("Informazioni Time zone UTC: " + dataObjUTC.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));

// Converti in fuso orario di Roma
const dataObjRM = dataObj.tz('Europe/Rome');
console.log("Informazioni Time zone Roma: " + dataObjRM.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));

// Offset tra UTC e Roma
const offset = dataObjRM.utcOffset() / 60; // Ottieni l'offset in ore
console.log("Offset tra fuso orario UTC e Roma: " + offset + " ore");

Prima di eseguire il programma assicurati di aver installato il modulo moment-timezone.

Per installare il modulo, devi eseguire il comanado seguente nella directory in cui è stato salvato il file gestione_date_iso.js:
 
npm install moment-timezone.
 

Leggi anche le altre lezioni ...

COMPETENZE PER PROGRAMMARE:
1-I sistemi di numerazione
2-Mondo reale e Mondo Digitale
3-La reppresentazione digitale dei numeri interi e decimali
4-Le stringhe
5-Le espressioni regolari (REGEXP)


Segui sul canale YouTube "Skill Factory Channel" la Playlist: COMPETENZE PER PROGRAMMARE


TUTORIALS
1-Laboratori di logica di programmazione in C
2-Impariamo a programmare con JavaScript
3-Ricominciamo dal linguaggio SQL
4-Introduzione alla logica degli oggetti
5-TypeScript
6-Impariamo a programmare in Python
7-Come sviluppare un sito in WordPress


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

 

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

ora locale data corrente greenwich GMT UTC fuso orario time zone zulu latitudine longitudine meridiano parallelo meridiani orari ora solare ora legale iso 8601 antimeridiano meridiano zero equatore python javascript

Share Button
TOP