Zeichenfolgendarstellung eines timestamp
(=timestamp without time zone
) hängt von Ihren Gebietsschemaeinstellungen ab. Um Zweideutigkeiten zu vermeiden, die zu Datenfehlern führen oder Postgres eine Ausnahme ausspuckt, haben Sie daher zwei Möglichkeiten:
1.) Verwenden Sie das ISO 8601-Format , was mit any genauso funktioniert Gebietsschema oder DateStyle
Einstellung:
'2013-08-20 14:52:49'
Je nach Anwendungsfall müssen Sie das Zeichenfolgenliteral möglicherweise explizit umwandeln, wenn der Datentyp nicht aus dem Kontext abgeleitet werden kann:
'2013-08-20 14:52:49'::timestamp
2.) Wandeln Sie den String in timestamp
um mit to_timestamp()
mit passendem Vorlagenmuster:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')
Dies gibt timestamptz
zurück , wobei die aktuelle Zeitzoneneinstellung angenommen wird. Typischerweise (wie bei einer Zuweisung) wird der Typ entsprechend erzwungen. Für timestamp
, bedeutet dies, dass der Zeitversatz abgeschnitten wird und Sie den erwarteten Wert erhalten. Wenn der Zieltyp nicht aus dem Kontext abgeleitet werden kann, müssen Sie möglicherweise explizit umwandeln:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp
Da dies einfach den Zeitversatz entfernt, ergibt sich der erwartete Wert. Oder verwenden Sie den AT TIME ZONE
Konstrukt mit einer Zeitzone Ihrer Wahl:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'
Während die Zielzeitzone dieselbe ist wie Ihre aktuelle timezone
Einstellung, findet keine Transformation statt. Andernfalls wird der resultierende Zeitstempel entsprechend transponiert. Weiterführende Literatur:
- Zeitzonen in Rails und PostgreSQL komplett ignorieren