Tekenreeksrepresentatie van een timestamp
(=timestamp without time zone
) hangt af van uw landinstellingen. Om dubbelzinnigheden die leiden tot gegevensfouten of het ophoesten van een uitzondering door Postgres te voorkomen, hebt u daarom twee opties:
1.) Gebruik ISO 8601-indeling , die hetzelfde werkt met elke locale of DateStyle
instelling:
'2013-08-20 14:52:49'
Mogelijk moet u de letterlijke tekenreeks expliciet casten waar het gegevenstype niet uit de context kan worden afgeleid, afhankelijk van de gebruikssituatie:
'2013-08-20 14:52:49'::timestamp
2.) Converteer de string naar timestamp
met behulp van to_timestamp()
met een bijpassend sjabloonpatroon:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')
Dit retourneert timestamptz
, uitgaande van de huidige tijdzone-instelling. Typisch (zoals in een opdracht) wordt het type dienovereenkomstig gedwongen. Voor timestamp
, dit betekent dat de tijdverschuiving wordt afgekapt en u de verwachte waarde krijgt. Nogmaals, als het doeltype niet uit de context kan worden afgeleid, moet u mogelijk expliciet casten:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp
Omdat dat gewoon de tijdsverschuiving weghaalt, resulteert dit in de verwachte waarde. Of gebruik de AT TIME ZONE
bouwen met een tijdzone naar keuze:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'
Hoewel de doeltijdzone hetzelfde is als uw huidige timezone
instelling vindt er geen transformatie plaats. Anders wordt de resulterende tijdstempel dienovereenkomstig getransponeerd. Verder lezen:
- Tijdzones volledig negeren in Rails en PostgreSQL