CodeGym /Corsi /Python SELF IT /Introduzione al lavoro con i fusi orari

Introduzione al lavoro con i fusi orari

Python SELF IT
Livello 40 , Lezione 2
Disponibile

1. Importanza dei fusi orari

I fusi orari non sono solo una scusa per un piccolo jetlag durante i voli internazionali. Svolgono un ruolo cruciale nella programmazione, specialmente quando si tratta di applicazioni e servizi globali. Tracciare il tempo in base ai fusi orari è necessario per salvare e visualizzare i dati, pianificare attività, coordinare team in tutto il mondo e molto altro. Senza considerare i fusi orari, il tuo codice rischia di creare una vera anomalia temporale, e questo non piacerà a nessuno, giusto?

Cos'è un fuso orario?

Un fuso orario è una regione in cui tutti gli orologi mostrano lo stesso tempo standard. Ogni fuso orario è definito dal suo offset rispetto al Tempo Coordinato Universale (UTC). Ad esempio, se nella tua zona il tempo è due ore avanti rispetto a UTC, il tuo fuso orario sarà indicato come UTC+2.

Conversione del tempo tra diversi fusi

Quando lavoriamo con dati che contengono orari, spesso c'è la necessità di adattare il tempo da un fuso all'altro. Per esempio, hai programmato il lancio di una campagna di marketing su un server che opera in UTC, ma vuoi che accada esattamente alle 9:00 a New York (UTC-5). Ed è qui che entrano in gioco i fusi orari.

Per semplificarti la vita, Python offre la libreria pytz, che aiuta a convertire il tempo tra fusi. Vediamo insieme alcuni esempi di utilizzo.

2. Lavorare con i fusi orari in Python

Usare pytz per gestire i fusi orari

Dopo l'installazione, possiamo iniziare a sperimentare con pytz. Importiamo la libreria insieme a datetime:

Python

from datetime import datetime
import pytz

Ottenere l'ora attuale in un fuso orario specifico

Vediamo che ora è attualmente a New York:

Python

# Creiamo un oggetto fuso orario per New York
ny_tz = pytz.timezone('America/New_York')

# Otteniamo l'ora corrente in UTC
utc_now = datetime.now(pytz.utc)

# Convertiamo il tempo UTC nel tempo di New York
ny_time = utc_now.astimezone(ny_tz)

# Stampiamo il risultato
print("Ora corrente a New York:", ny_time)

Questo codice converte l'ora corrente UTC nell'ora di New York, che poi viene visualizzata in formato leggibile.

Conversione del tempo tra fusi

Immagina di avere la data di un evento importante a Londra e di voler sapere a che ora avverrà secondo l'ora di Tokyo.

Python

# Ora dell'evento a Londra
event_time = datetime(2023, 10, 31, 15, 0, 0, tzinfo=pytz.utc).astimezone(pytz.timezone('Europe/London'))

# Convertiamo il tempo in quello di Tokyo
tokyo_tz = pytz.timezone('Asia/Tokyo')
event_time_tokyo = event_time.astimezone(tokyo_tz)

print("Ora dell'evento a Tokyo:", event_time_tokyo)

3. Lavorare avanzatamente con i fusi orari in Python

Elenco dei fusi orari disponibili

Con pytz.all_timezones puoi ottenere un elenco di tutti i fusi orari supportati dalla libreria pytz.

Python

import pytz

print("Esempio di fusi orari:")
for timezone in pytz.all_timezones[:5]:  # Mostra i primi 5 fusi orari
    print(timezone)

Output (parziale):

Esempio di fusi orari:
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara

Impostare un fuso orario e creare un oggetto `datetime`

Con pytz.timezone() puoi impostare il fuso orario desiderato per data e ora. Vediamo come creare un oggetto datetime con un fuso orario specifico.

Python

from datetime import datetime
import pytz

# Selezioniamo il fuso orario "Europe/Moscow"
moscow_timezone = pytz.timezone("Europe/Moscow")
current_time_moscow = datetime.now(moscow_timezone)
print("Ora corrente a Mosca:", current_time_moscow)

Considerare l'ora legale

Uno degli aspetti importanti dei fusi orari è la gestione dell'ora legale, che è automatizzata in pytz. Ad esempio, se lavori con l'ora negli Stati Uniti, la libreria applica automaticamente lo spostamento per l'ora legale, se necessario.

Python

from datetime import datetime
import pytz

# Impostiamo una data che rientra nel periodo dell'ora legale
date_in_summer = datetime(2024, 7, 1, 12, 0, 0)
ny_timezone = pytz.timezone("America/New_York")
ny_summer_time = ny_timezone.localize(date_in_summer)
print("Ora legale a New York:", ny_summer_time)

# Impostiamo una data al di fuori dell'ora legale
date_in_winter = datetime(2024, 12, 1, 12, 0, 0)
ny_winter_time = ny_timezone.localize(date_in_winter)
print("Ora invernale a New York:", ny_winter_time)

Qui pytz determina automaticamente che il 1º luglio è nel periodo dell'ora legale e applica uno spostamento di un'ora.

Funzioni utili per lavorare con i fusi orari

  • Ottenere tutti i fusi orari: pytz.all_timezones restituisce un elenco di tutti i fusi orari.
  • Conversione in UTC: Il metodo astimezone(pytz.utc) converte qualsiasi ora in UTC.
  • Conversione da stringa a datetime: Usa datetime.strptime() per convertire un orario in formato stringa in un oggetto datetime e aggiungere un fuso orario.
  • Aggiornare i fusi orari: Per aggiornare i fusi orari, usa pytz.update().
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION