gpt4 book ai didi

postgresql - Postgres 时区和格式

转载 作者:行者123 更新时间:2023-11-29 13:20:19 25 4
gpt4 key购买 nike

我知道有一些类似的问题,但我很难理解为什么我的数据库会按照现在的方式格式化时间。

我有一个名为 created_at 的字段,在数据库中的值为:

2017-03-30 11:01:25.976-04

现在是纽约时间上午 11 点,与 UTC 相比有四个小时的负偏移。

我希望它显示为 11:01am。但是,当我使用 TO_CHAR() 对其进行格式化时,它会将时间转换为 UTC 并显示 3:01pm

SELECT to_char(ledger.created_at, 'Mon DD YYYY HH12: MI AM') AS formatted_date ...

我可以通过添加 AT TIME ZONE 'America/New_York' 来解决这个问题,但我不喜欢在我的应用程序中进行硬编码的想法。

SELECT to_char(ledger.created_at AT TIME ZONE 'America/New_York', 'Mon DD YYYY HH12: MI AM') AS formatted_date ...

似乎时间戳字段知道现在是什么时间,它在哪个时区(或者至少是偏移量),并且它在数据库本身中显示上午 11 点。

我也知道我可以在每次查询之前SET 本地时间并且它会起作用,但我再次想知道是否有更简单的方法。似乎我可以去除时区信息,只获取数据库中的 11:01am 时间。如果没有办法,我可以忍受,但我需要检查一下。

对于上下文,这是在使用 Sequelize 的 Node 和 Express 应用程序中。

最佳答案

PostgreSQL 不存储时区,它存储timestamp with time zone作为 UTC 时间戳。

检索后,它会转换为数据库 session 中有效的时区(使用 SET <a href="https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-TIMEZONE" rel="noreferrer noopener nofollow"><code>TimeZone</code></a> = '...' 设置)。

所以要将其转换为某个时区的字符串,有两种方式:

  • 使用 SET TimeZone = '...' 调整 session 时区.

  • 使用 AT TIME ZONE 明确指定时区.

根据您的问题,我推断您的 session 时区设置为 UTC。

必须在某处指定所需的时区...

关于postgresql - Postgres 时区和格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com