我要在PostgreSQL数据库中节省日期和时间并获取并以适当的格式显示给用户。
假设应用程序用户位于伊朗,使用 JALALI日期/时间系统。在上半年,伊朗时间是UTC 04:30,但在剩下的时间里,是UTC 03:30。事实上,伊朗使用了日光节省时间。
重要: 有时我们会做出决定,并将数据库服务器的位置从伊朗到欧洲或其他地方。
现在我有一些问题:
-
哪种数据类型更方便地保存日期?
TIMESTAMP
(TIMESTAMP WITHOUT TIMEZONE
)或TIMESTAMPZ
(TIMESTAMP WITH TIME ZONE
)? -
哪种数据类型更方便地保存仅时间?
TIME
或TIME WITH TIME ZONE
? -
哪种数据类型更方便地保存 DATE仅?
DATE
(Gregorian)String
(Jalali)或自定义数据类型? -
如何设置一次数据库的时区?我想将数据库设置为一次 ,然后在Timestampz列上的所有查询都将在该时区中保存和获取,并且还考虑了日光节省时间?
-
当我保存当前日期和时间时,哪种SQL查询是最好的?
a-插入测试值(d)值(NOW());
b-插入测试值(d)值(现在()在时区'utc');
c-插入测试值(d)值(现在()在时区'asia/tehran');
d-插入测试(d)值(current_timestamp);
e-插入测试值(d)值(NOW(NOW)在时区'utc');
f-插入到测试值(d)值(现在()在时区'asia/tehran');
-
保存或不保存时,数字5-C和5-F考虑了夏令时?
-
当数据库具有'Asia/tehran'时区时,在"亚洲/Tehran"中保存了数字5-A和5-D?
-
当我从数据库中查询时,我的情况是什么选择?
a-从测试中选择d;
b-从测试中的时区选择d;
c-从测试中选择D在时区'Asia/tehran';
-
数字7-C是否考虑了夏令时?
-
当数据库具有"亚洲/德黑兰"时区时,数字7-A被视为"亚洲/德黑兰"时区和日光节省时间?
如果我最好使用时间戳来节省日期/时间,那么我必须将夏令时添加节省时间并将其转换为jalali日期时间并将其显示给用户,反之亦然。
<</p> <</p>https://www.postgresql.org/docs/current/current/static/datatype-datempetime.html
对于时区的时间戳,内部存储的值始终在 UTC(通用协调时间,传统上被称为格林威治 时间,GMT)。指定时区的输入值是 使用该时区的适当偏移转换为UTC。如果 输入字符串中没有说明时区,然后假定为 在系统的时区参数指示的时区,为 使用时区区域的偏移转换为UTC。
当输出时区值的时间戳时,它始终是 从UTC转换为当前时区区域,并显示为 该区域的当地时间。要在另一个时区查看时间, 更改时区或使用在时区构造
- timestamptz
- timestamptz并选择日期
- timestamptz,只选择时间
- 无论您的语言环境或设置如何,数据库都会将TZ注意时间戳保存在UTC中。邮票始终通过时区参数转换为UTC。每次显示数据时都会发生相同的变形。服务器的
TimeZone
仅是默认值,如果客户端未指定任何内容,则使用。数据库TimeZone
覆盖了指定数据库中的Postgresql.conf中的一个,但仍然,客户端设置将覆盖数据库。