Re: [postgresql-it] Cambio locale ?

  • From: Andrea Adami <fol@xxxxxxxxxx>
  • To: postgresql-it <postgresql-it@xxxxxxxxxxxxx>
  • Date: Fri, 15 Dec 2017 10:39:47 +0100

la data memorizzata sul db non tiene conto della tmz.
Postgresql cioè non memorizza il timezone di una data.
La differenza fra un tipo di data con time zone o senza time è che:
senza timezone postgres non si preoccupa minimamente della cosa: scrive e
legge il dato così come gli viene passato.
con time zone invece per convenzione si da' che il timezone sia scritto
come utc (tmz 0)
poi quando viene letto viene convertito nel timezone del client e quando
viene scritto si fa' il contrario.
Poi ovviamente c'è il problema di rappresentare la data in maniera univoca
(cioè che non si confonda il 10 gennaio con il primo di ottobre)
io uso sempre il formato iso8601 (data lunga rovescia: yyyy-mm-dd
hh:mm:ss.mmmm con tmz: yyyy-mm-dd hh:mm:ss.mmmmm+2)
Personalmente  uso il timezone solo sotto tortura perchè innanzitutto ti
obbliga a usare un timestamp e non un semplice date (se visualizzi il 14
gennaio con timezone +3 alle 02.00 del mattino in realtà viene memorizzato
come 13 gennario alle 23.00, se non hai il timezone però viene memorizzato
alle 00:00 e se non tieni conto conto dell'ora nella successiva
visualizzazione verrebbe visualizzato come 13 gennaio alle 03.00) e poi
perchè devi tenere conto anche dell'ora legale: bagno di sangue assicurato

Sperando di essere stato utile ....
Ciao
Andrea

Il giorno 12 dicembre 2017 11:05, Piviul <piviul@xxxxxxxxxxxx> ha scritto:

Il 08/12/2017 00:30, acheriom@xxxxxxxxx ha scritto:

Ciao a tutti,

Ho un'applicazione che gira sotto Windows e che usa PosgreSQL come DB.
Sulla macchina di sviluppo funziona perfettamente pero' quando faccio
girare l'applicazione in produzione (VPS - Windows 2008 server) le date/ore
memorizzate nel DB vengono convertite nella corrispondente ora americana e
cambiate in formato.

Per esempio, la data/ora 05/12/2017 21:30:13 viene memorizzata nel DB
come 12/05/2017 1:30PM, in sostanza viene cambiato il formato e viene
cambiata anche l'ora con quella corrispondente americana.

Per quanto riguarda la data, il problema non è nella visualizzazione delle
date ma nella interpretazione della data quando inserisci i dati nel db. In
altre parole devi fare in modo che quando il client manda i dati al server
questi vengano interpretati in modo corretto. Questo per dire che il
comando datestyle presente in postgresql.conf non ti cambia le date che hai
già inserito ma ti potrebbe permettere in futuro che le date vengano
inserite in modo corretto.
Forse quindi prima di cambiare il parametro datestyle ti conviene
rinominare il campo data, crearne un nuovo, cambiare il parametro datestyle
e successivamente importare le vecchie date nel nuovo campo interpretate
però in maniera corretta.


Other related posts: