在 PostgreSQL 数据库中保存日期和时间的最佳方法

Pez*_*aee 6 postgresql sqldatatypes

我将在 PostgreSQL 数据库中保存日期和时间,然后获取并以适当的格式向用户显示。

假设应用程序用户位于伊朗并使用Jalali 日期/时间系统。上半年伊朗时间为UTC+04:30,其余时间为UTC+03:30。事实上,伊朗使用夏令时。

重要提示:有时我们会做出决定并将数据库服务器位置从伊朗更改为欧洲或其他地方。

现在我有一些问题:

  1. 什么数据类型更方便保存日期和时间TIMESTAMPTIMESTAMP WITHOUT TIMEZONE) 或者TIMESTAMPZTIMESTAMP WITH TIME ZONE)?

  2. 哪种数据类型更方便、更节省时间TIME或者TIME WITH TIME ZONE

  3. 什么数据类型更方便只保存日期?DATE(公历)String(Jalali)还是自定义数据类型?

  4. 如何为我们的数据库设置一次TIMEZONE?我想为数据库设置一次TIMEZONE ,之后对 TIMESTAMPZ 列的所有查询都将在该 TIMEZONE 内保存和获取,并且还考虑夏令时?

  5. 当我想要保存当前日期和时间时,什么 SQL 查询是最好的?

    a-插入测试(d)值(now());

    b- INSERT INTO test(d) VALUES(now() at time zone 'utc');

    c- INSERT INTO test(d) VALUES(now() at time zone 'Asia/Tehran');

    d- INSERT INTO test(d) VALUES(current_timestamp);

    e- INSERT INTO test(d) VALUES(now() at time zone 'utc');

    f- INSERT INTO test(d) VALUES(now() at time zone 'Asia/Tehran');

  6. 保存或不保存时,数字5-c和5-f是否被视为夏令时?

  7. 当数据库具有“亚洲/德黑兰”时区时,数字 5-a 和 5-d 是否保存在“亚洲/德黑兰”中?

  8. 当我想从数据库查询时,什么选项最适合我的情况?

    a- 从测试中选择 d;

    b- 从测试中选择“utc”时区的 d;

    c- 从测试中选择“亚洲/德黑兰”时区的 d;

  9. 7-c 号是否被视为夏令时?

  10. 当数据库具有“亚洲/德黑兰”时区时,数字 7-a 是否被视为“亚洲/德黑兰”时区和夏令时?

如果我最好使用时间戳来保存日期/时间,那么我必须为其添加夏令时并将其转换为 Jalali 日期时间并将其显示给用户,反之亦然。

Vao*_*sun 5

https://www.postgresql.org/docs/current/static/datatype-datetime.html

对于带时区的时间戳,内部存储的值始终采用 UTC(通用协调时间,传统上称为格林威治标准时间,GMT)。指定了显式时区的输入值将使用该时区的适当偏移量转换为 UTC。如果输入字符串中未指定时区,则假定其处于系统 TimeZone 参数指示的时区,并使用时区的偏移量将其转换为 UTC。

当输出带有时区值的时间戳时,它始终从 UTC 转换为当前时区,并显示为该区域的本地时间。要查看另一个时区的时间,请更改时区或使用 AT TIME ZONE 构造

  1. 时间戳
  2. timestamptz 并仅选择日期
  3. timestamptz 和仅选择时间
  4. 无论您的区域设置或设置如何,数据库都会以 UTC 格式保存 tz 感知时间戳。时间戳始终转换为 UTC,通过 TimeZone 参数进行调整。每次显示数据时都会发生相同的反转换。TimeZone对于服务器来说只是默认值,如果客户端没有指定任何值则使用。数据库TimeZone会覆盖指定数据库的 postgresql.conf 中的设置,但客户端设置仍然会覆盖数据库设置。