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



我要在PostgreSQL数据库中节省日期和时间并获取并以适当的格式显示给用户。

假设应用程序用户位于伊朗,使用 JALALI日期/时间系统。在上半年,伊朗时间是UTC 04:30,但在剩下的时间里,是UTC 03:30。事实上,伊朗使用了日光节省时间。

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

现在我有一些问题:

  1. 哪种数据类型更方便地保存日期TIMESTAMPTIMESTAMP WITHOUT TIMEZONE)或TIMESTAMPZTIMESTAMP WITH TIME ZONE)?

  2. 哪种数据类型更方便地保存仅时间TIMETIME WITH TIME ZONE

  3. 哪种数据类型更方便地保存 DATE仅DATE(Gregorian)String(Jalali)或自定义数据类型?

  4. 如何设置一次数据库的时区?我想将数据库设置为一次 ,然后在Timestampz列上的所有查询都将在该时区中保存和获取,并且还考虑了日光节省时间?

  5. 当我保存当前日期和时间时,哪种SQL查询是最好的?

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

    b-插入测试值(d)值(现在()在时区'utc');

    c-插入测试值(d)值(现在()在时区'asia/tehran');

    d-插入测试(d)值(current_timestamp);

    e-插入测试值(d)值(NOW(NOW)在时区'utc');

    f-插入到测试值(d)值(现在()在时区'asia/tehran');

  6. 保存或不保存时,数字5-C和5-F考虑了夏令时?

  7. 当数据库具有'Asia/tehran'时区时,在"亚洲/Tehran"中保存了数字5-A和5-D?

  8. 当我从数据库中查询时,我的情况是什么选择?

    a-从测试中选择d;

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

    c-从测试中选择D在时区'Asia/tehran';

  9. 数字7-C是否考虑了夏令时?

  10. 当数据库具有"亚洲/德黑兰"时区时,数字7-A被视为"亚洲/德黑兰"时区和日光节省时间?

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

<</p> <</p>

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

对于时区的时间戳,内部存储的值始终在 UTC(通用协调时间,传统上被称为格林威治 时间,GMT)。指定时区的输入值是 使用该时区的适当偏移转换为UTC。如果 输入字符串中没有说明时区,然后假定为 在系统的时区参数指示的时区,为 使用时区区域的偏移转换为UTC。

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

  1. timestamptz
  2. timestamptz并选择日期
  3. timestamptz,只选择时间
  4. 无论您的语言环境或设置如何,数据库都会将TZ注意时间戳保存在UTC中。邮票始终通过时区参数转换为UTC。每次显示数据时都会发生相同的变形。服务器的TimeZone仅是默认值,如果客户端未指定任何内容,则使用。数据库TimeZone覆盖了指定数据库中的Postgresql.conf中的一个,但仍然,客户端设置将覆盖数据库。