提问人:ketil 提问时间:9/27/2023 更新时间:9/27/2023 访问量:26
日期转换不支持 postgresql 15 中的区域设置
Casting of dates does not honor locale settings in postgresql 15
问:
我正在尝试了解 postgresql 15 和语言环境设置的所有点点滴滴。我正在尝试设置控制区域设置的所有各种设置,但我仍然得到一些意外的结果。
postgres=# CREATE DATABASE lctest TEMPLATE='template0' LC_COLLATE='nb_NO.UTF-8' LOCALE='nb_NO.UTF-8';
CREATE DATABASE
postgres=# \c lctest
You are now connected to database "lctest" as user "postgres".
lctest=# show LC_TIME;
lc_time
-------------
nb_NO.UTF-8
(1 row)
lctest=# select DATE('07/08/2009');
date
------------
2009-07-08
(1 row)
lctest=# select to_char(DATE('07/08/2009'), 'DD/TMMonth/YYYY');
to_char
--------------
08/Juli/2009
(1 row)
这就是我认为结果出乎意料的地方。我从字符串中转换一个日期,postgres 将日期解释为 .鉴于我的区域设置,这与预期结果不一致。我还将所有其他可用值设置为 ,并且正如预期的那样,我得到了相同的结果,因为我认为其他值不会影响这一点。MM/DD/YYYY
LC_*
nb_NO.UTF-8
是否还有更多设置可以影响 postgres 15 中日期字符串的解析方式?
我当然可以将日期格式指定为 ,但这会破坏语言环境设置的灵活性。如果我必须指定所有格式详细信息,那么语言环境的意义何在,对吧?DD/MM/YYYY
答:
0赞
Laurenz Albe
9/27/2023
#1
lc_time
不影响字符串被解释为日期的方式。它用于(将时间戳格式化为字符串)和特殊的格式指令,如 .to_char()
TMMonth
要影响字符串被解释为日期的方式,您必须配置 。例如:datestyle
SET datestyle = 'GERMAN, DMY';
select DATE('07/08/2009');
date
════════════
07.08.2009
(1 row)
上一个:存储带有时间戳的原始时区
评论
DateStyle
DMY
MDY
SET DateStyle = 'ISO, DMY';