Rappresentazione in stringa di un timestamp
(=timestamp without time zone
) dipende dalle impostazioni locali. Pertanto, per evitare ambiguità che portano a errori di dati o Postgres a tirar fuori un'eccezione, hai due opzioni:
1.) Usa il formato ISO 8601 , che funziona allo stesso modo con qualsiasi locale o DateStyle
impostazione:
'2013-08-20 14:52:49'
Potrebbe essere necessario eseguire il cast della stringa letterale in modo esplicito in cui il tipo di dati non può essere derivato dal contesto, a seconda del caso d'uso:
'2013-08-20 14:52:49'::timestamp
2.) Converti la stringa in timestamp
utilizzando to_timestamp()
con un modello di modello corrispondente:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')
Questo restituisce timestamptz
, assumendo l'impostazione del fuso orario corrente. Tipicamente (come in un incarico) il tipo viene forzato di conseguenza. Per timestamp
, ciò significa che l'offset temporale viene troncato e ottieni il valore previsto. Anche in questo caso, se il tipo di destinazione non può essere derivato dal contesto, potresti dover eseguire il cast in modo esplicito:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp
Poiché ciò elimina semplicemente l'offset di tempo, risulta nel valore atteso. Oppure usa il AT TIME ZONE
costruisci con un fuso orario a tua scelta:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'
Sebbene il fuso orario target sia lo stesso del tuo attuale timezone
impostazione, non avviene alcuna trasformazione. Altrimenti il timestamp risultante viene trasposto di conseguenza. Ulteriori letture:
- Ignora del tutto i fusi orari in Rails e PostgreSQL