当前位置: 首页 > 知识库问答 >
问题:

带时区的PostgreSQL date()

鲁浩言
2023-03-14

在本例中,2012-06-21应为2012-06-20

starts_at列datatype是timestamp(不带时区)。以下是我的疑问:

不转换为PST时区:

Select starts_at from schedules where id = 40;

      starts_at      
---------------------
 2012-06-21 01:00:00
Select (starts_at at time zone 'pst') from schedules where id = 40;
        timezone        
------------------------
 2012-06-21 02:00:00-07

共有1个答案

申博厚
2023-03-14

基本上你想要的是:

$ select starts_at AT TIME ZONE 'UTC' AT TIME ZONE 'US/Pacific' from schedules where id = 40

我从下面这篇文章中得到了解决方案,这是直金!!!它非常清楚地解释了这个重要的问题,如果您希望更好地理解pstgrsql TZ管理,请阅读它。

用本地时间表示不带区域的PostgreSQL时间戳

$ select starts_at AT TIME ZONE 'US/Pacific' from schedules where id = 40
$ select timestamp '2014-01-2 00:30:00' AS a, timestamp '2014-01-2 00:30:00' AT TIME ZONE 'UTC' AS b,  timestamp '2014-01-2 00:30:00' AT TIME ZONE 'UTC' AT TIME ZONE 'PST' AS c, timestamp '2014-01-2 00:30:00' AT TIME ZONE 'PST' AS d

这将产生:

"a"=>"2014-01-02 00:30:00"   (This is the timezoneless timestamp)
"b"=>"2014-01-02 00:30:00+00" (This is the UTC TZ timestamp, note that up to a timezone, it is equivalent to the timezoneless one)
"c"=>"2014-01-01 16:30:00" (This is the correct 'PST' TZ conversion of the UTC timezone, if you read the documentation postgresql will not print the actual TZ for this conversion)
"d"=>"2014-01-02 08:30:00+00"

最后一个时间戳是在PostgreSQL中将无timezontimestamp从UTC转换为“PST”时出现混乱的原因。当我们写:

timestamp '2014-01-2 00:30:00' AT TIME ZONE 'PST' AS d

我们使用一个无TimeZone时间戳,并尝试将其转换为“PST TZ”(我们间接假设postgresql会理解我们希望它将时间戳从UTC TZ转换,但postresql有自己的计划!)。实际上,postgresql所做的是获取无时区时间戳('2014-01-2 00:30:00),并将其视为已经是'PST'TZ时间戳(即:2014-01-2 00:30:00-0800),并将其转换为UTC时区!!!所以它实际上把它提前了8个小时,而不是后退!于是我们得到了(2014-01-02-08:30:00+00)。

 类似资料:
  • 返回我女巫是错误的。 但接下来的查询如下: 我看对日期

  • 问题内容: 我有一个返回例如DateTime对象的Web服务:DepartureDate。我使用ajax来获取此代码,并在我看来使用此功能将JSON日期字符串转换为javascript日期对象: 问题是要考虑到客户端计算机上的本地时间,因此不同国家/地区的客户端会获得不同的日期。我想获取从Web服务返回的确切日期。有没有简单的方法可以做到这一点? 问题答案: 问题是考虑了客户端计算机上的本地时间

  • 我正在尝试使用Laravel Schema Builder向PostgreSQL数据库表中添加一个带有时区的时间戳。 架构生成器提供函数

  • 从MariaDB转移到postgres-10后,我得到下面的错误我使用Django-orm 函数日期格式(带时区的时间戳,未知)不存在第1行:选择(日期格式(在,'%h%p')创建)为“以小时为单位”,求和(。。。 提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换。 谁能解释一下哪里出了问题。非常感谢。

  • 问题内容: 当日期中包含EDT / EST时,我们是否有任何API可以验证日期是否有效。我已经尝试过用Java Java SimpleDateFormat进行Joda,但是我无法解析日期。 下面是我正在获取“ 2017/09/25 16:18:15.099 -0400 EDT”的示例格式。 任何帮助表示赞赏。 谢谢,sk 问题答案: 您是否尝试阅读文档? 从以下文档中: 区域名称 :这将输出时区I