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