Lavorare con i fusi orari

Analisi delle serie temporali in PostgreSQL

Jasmin Ludolf

Content Developer, DataCamp

Dati sui fusi orari

  • TIMESTAMP: data e ora senza fuso orario

    • Ok se usi un solo fuso orario
    • Tutti gli orari sono in UTC
  • TIMESTAMPTZ: data e ora con fuso orario

Illustrazione di quattro orologi con orari diversi.

Analisi delle serie temporali in PostgreSQL

Nomi dei fusi orari

SELECT * FROM pg_timezone_names;
| name             |abbrev|utc_offset|is_dst|
|------------------|------|----------|------|
|Africa/Abidjan    |GMT   |  00:00:00|false |
|Africa/Accra      |GMT   |  00:00:00|false |
|Africa/Addis_Ababa|EAT   |   3:00:00|false |
...
  • is_dst: indica se la località osserva l’ora legale
Analisi delle serie temporali in PostgreSQL

Mostrare il fuso orario

SHOW TIMEZONE;
|TimeZone       |
|---------------|
|Europe/Brussels|
Analisi delle serie temporali in PostgreSQL

Dati di fuso orario nelle tabelle

  • La tabella datetimes ha due campi:
    • datetime: TIMESTAMP
    • datetimetz: TIMESTAMPTZ
INSERT INTO datetimes (datetime, datetimetz)
VALUES('2023-01-03 12:00:00','2023-01-03 12:00:00');
|datetime           |datetimetz               |
|-------------------|-------------------------|
|2023-01-03 12:00:00|2023-01-03 12:00:00+01:00|
Analisi delle serie temporali in PostgreSQL

Verificare il tipo di dato

  • pg_typeof(field_name): controlla il tipo del campo
SELECT
    pg_typeof(datetime) AS "type of(datetime)", 
    pg_typeof(datetimetz) AS "type of(datetimetz)"
FROM datetimes;
|type of(datetime)          |type of(datetimetz)     |
|---------------------------|------------------------|
|timestamp without time zone|timestamp with time zone|
Analisi delle serie temporali in PostgreSQL

Uso delle info sul fuso orario

INSERT INTO datetimes (datetime, datetimetz)
VALUES('2023-01-03 12:00:00+00','2023-01-03 12:00:00+00');
SELECT * FROM datetimes;
|datetime           |datetimetz               |
|-------------------|-------------------------|
|2023-01-03 12:00:00|2023-01-03 12:00:00+01:00|
|2023-01-03 12:00:00|2023-01-03 13:00:00+01:00|
Analisi delle serie temporali in PostgreSQL

Aggiungere info di fuso orario

  • AT TIME ZONE: aggiunge, cambia o rimuove le info di fuso orario
    • Converte il tipo tra TIMESTAMP e TIMESTAMPTZ e viceversa

Aggiungere un fuso orario:

SELECT 
    TIMESTAMP '2020-12-31 23:59:59' AT TIME ZONE 'Europe/London' AS added;
|added                    |
|-------------------------|
|2021-01-01 00:59:59+01:00|

Questa query: interpreta il timestamp, crea TIMESTAMPTZ, mostra il valore predefinito

Analisi delle serie temporali in PostgreSQL

Modificare e rimuovere fusi orari

SELECT 
    '2020-12-31 23:59:59+00'::TIMESTAMPTZ AT TIME ZONE 'Europe/Paris' 
    AS shifted;
|shifted            |
|-------------------|
|2021-01-01 00:59:59|

Questa query: sposta il timestamp nel fuso orario desiderato, rimuove l’indicazione del fuso

Analisi delle serie temporali in PostgreSQL

Passons à la pratique !

Analisi delle serie temporali in PostgreSQL

Preparing Video For Download...