In PostgreSQL, la formattazione dei timestamp è indipendente dalla memoria. Una risposta è quella di utilizzare to_char
e formattare il timestamp a qualsiasi formato che vi serve in questo momento avete bisogno, in questo modo:
select to_char(current_timestamp, 'yyyy-MM-dd HH24:MI:SS.MS');
select to_timestamp('2012-10-11 12:13:14.123',
'yyyy-MM-dd HH24:MI:SS.MS')::timestamp;
Ma se è necessario impostare la formattazione predefinita:
Cambiare il timestamp PostgreSQL formato a livello globale:
Date un'occhiata al vostro fuso orario, eseguire questo come una query SQL:
show timezone
Result: "US/Eastern"
Così, quando si stampa fuori CURRENT_TIMESTAMP, si vede questo:
select current_timestamp
Result: 2012-10-23 20:58:35.422282-04
Il -04
alla fine è il vostro fuso orario rispetto a UTC.È possibile modificare il fuso orario con:
set timezone = 'US/Pacific'
Poi:
select current_timestamp
Result: 2012-10-23 18:00:38.773296-07
Così notare il -07
lì, questo significa che Pacific è di 7 ore da UTC. Come faccio a far scomparire quell'imprevisto fuso orario? Un modo è solo per fare un tavolo, il valore predefinito è un timestamp senza fuso orario:
CREATE TABLE worse_than_fail_table
(
mykey INT unique not null,
fail_date TIMESTAMP not null
);
Poi se si aggiunge un timestamp a quel tavolo e selezionare da esso
select fail_date from worse_than_fail_table
Result: 2012-10-23 21:09:39.335146
yay, nessun fuso orario sul fine. Ma vuoi un maggiore controllo su come viene visualizzato il timestamp di default! Si potrebbe fare qualcosa di simile:
CREATE TABLE moo (
key int PRIMARY KEY,
boo text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
Si tratta di un campo di testo che vi dà più controllo su come si presenta per impostazione predefinita quando si fa un select somecolumns from sometable
. AVVISO si può lanciare una stringa a timestamp:
select '2012-10-11 12:13:14.56789'::timestamp
Result: 2012-10-11 12:13:14.56789
potresti lanciare una CURRENT_TIMESTAMP a timestamp
che rimuove il fuso orario:
select current_timestamp::timestamp
Result: 2012-10-23 21:18:05.107047
Si può sbarazzarsi del fuso orario in questo modo:
select current_timestamp at time zone 'UTC'
Result: "2012-10-24 01:40:10.543251"
Ma se vuoi davvero tornare indietro nel fuso orario, puoi farlo:
select current_timestamp::timestamp with time zone
Result: 2012-10-23 21:20:21.256478-04
Si può tirare fuori ciò che si vuole con estratto:
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20
E questa mostruosità:
SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'EST';
Result: 2001-02-16 20:38:40
cui applicazione client stai usando? –
prototipo in php, passaggio a node.js in circa 6 mesi –
Quindi questa sarebbe un'impostazione php da modificare, non un'impostazione Postgres. –