Řetězcová reprezentace timestamp
(=timestamp without time zone
) závisí na vašem místním nastavení. Abyste se vyhnuli nejasnostem vedoucím k chybám v datech nebo aby se Postgres vykašlal na výjimku, máte dvě možnosti:
1.) Použijte formát ISO 8601 , který funguje stejně s libovolným národní prostředí nebo DateStyle
nastavení:
'2013-08-20 14:52:49'
Možná budete muset přetypovat řetězcový literál explicitně tam, kde datový typ nelze odvodit z kontextu, v závislosti na případu použití:
'2013-08-20 14:52:49'::timestamp
2.) Převeďte řetězec na timestamp
pomocí to_timestamp()
s odpovídajícím vzorem šablony:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')
To vrátí timestamptz
, za předpokladu aktuálního nastavení časového pásma. Typicky (jako v zadání) je typ odpovídajícím způsobem vynucen. Pro timestamp
, to znamená, že časový posun je zkrácen a získáte očekávanou hodnotu. Pokud cílový typ nelze odvodit z kontextu, možná budete muset přetypovat explicitně:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp
Protože to jednoduše odstraní časový posun, výsledkem je očekávaná hodnota. Nebo použijte AT TIME ZONE
vytvořit s časovým pásmem dle vašeho výběru:
to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'
Zatímco cílové časové pásmo je stejné jako vaše aktuální timezone
nastavení, nedochází k žádné transformaci. Jinak je výsledné časové razítko odpovídajícím způsobem transponováno. Další čtení:
- Úplné ignorování časových pásem v Rails a PostgreSQL