Strengrepræsentation af et timestamp
(=timestamp without time zone
) afhænger af dine lokalitetsindstillinger. For at undgå uklarheder, der fører til datafejl, eller at Postgres hoster op med en undtagelse, har du derfor to muligheder:
1.) Brug ISO 8601-format , som fungerer på samme måde med enhver locale eller DateStyle
indstilling:
'2013-08-20 14:52:49'
Du skal muligvis caste strengen literal eksplicit, hvor datatypen ikke kan afledes fra kontekst, afhængigt af brugssituationen:
'2013-08-20 14:52:49'::timestamp
2.) Konverter strengen til timestamp
ved hjælp af to_timestamp()
med et matchende skabelonmønster:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')
Dette returnerer timestamptz
under forudsætning af den aktuelle tidszoneindstilling. Typisk (som i en opgave) tvinges typen i overensstemmelse hermed. For timestamp
, betyder det, at tidsforskydningen afkortes, og du får den forventede værdi. Igen, hvis måltypen ikke kan afledes fra kontekst, skal du muligvis caste eksplicit:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp
Da det blot fjerner tidsforskydningen, resulterer det i den forventede værdi. Eller brug AT TIME ZONE
konstruer med en tidszone efter eget valg:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'
Mens måltidszonen er den samme som din nuværende timezone
indstilling finder ingen transformation sted. Ellers transponeres det resulterende tidsstempel i overensstemmelse hermed. Yderligere læsning:
- Ignorerer tidszoner helt i Rails og PostgreSQL