PostgreSQL:将字符串转换为没有时区以更改时间日期的时间戳时,我得到了意想不到的结果
PosgreSQL: I get unexpected results when casting strings as timestamp without time zone for changing time date
服务器信息
显示时区;
Europe/Paris
我曾经使用不带时区的时间戳转换字符串:
select '2003-04-30 02:01:47'::时间戳
2003-04-30 02:01:47
通常 CAST 运行良好,但我最近发现 PostgreSQL 在某些特定情况下不会呈现预期值。事实上,对于法国的每个夏令时更改日以及凌晨 2 点到 3 点之间的时间,PostgreSQL 似乎将字符串更改为当地时间而不是其他日期的 UTC !!
select '2003-03-30 02:01:47'::时间戳
2003-03-30 03:01:47
任何解释以及如何按预期获取时间戳(不更改服务器配置)?
在没有时区的时间戳的情况下,我无法解释你的行为,因为这不会发生在我这边。
在timestamp with time zone的情况下,情况比较复杂:在02:00:00和02:59:59之间,系统将字符串转换为timestamp,同时由于switch将偏移量增加1从冬令时到夏令时,并将时间增加 1 小时,因为 02:00:00+01(冬令时)= 03:00:00+02(夏令时)。
问题是在 03:00:00 时,转换不再将时间增加 1,以实现我们因切换而损失 1 小时的事实。
因此,字符串“03:00:00”被转换为时间戳“03:00:00+02”,即时间戳“03:59:59+02”之前的 59 分 59 秒从字符串 '02:59:59' 转换而来。从时间轴的角度来看,字符串 '03:00:00' 和 '02:59:59" 的转换不一致。
我在这一点上提出了一个错误,建议禁止在“2003-03-30 02:00:00”和“2003-03-30 02:59:59”之间转换字符串,并带有一条明确的消息:由于冬令时/夏令时切换,相应的时间间隔从未存在过。
Here 是包含 Tom Lane 回答的错误报告
Here是相关文档
好的,这个问题与 Postgresql 无关。我使用 dbeaver 作为客户端与 Posgresql 进行通信。为了解决这个问题,我必须在 dbeaver 选项中禁用 data/time 格式:
看看这个issue。
特别是这个 comment.
服务器信息
显示时区;
Europe/Paris
我曾经使用不带时区的时间戳转换字符串:
select '2003-04-30 02:01:47'::时间戳
2003-04-30 02:01:47
通常 CAST 运行良好,但我最近发现 PostgreSQL 在某些特定情况下不会呈现预期值。事实上,对于法国的每个夏令时更改日以及凌晨 2 点到 3 点之间的时间,PostgreSQL 似乎将字符串更改为当地时间而不是其他日期的 UTC !!
select '2003-03-30 02:01:47'::时间戳
2003-03-30 03:01:47
任何解释以及如何按预期获取时间戳(不更改服务器配置)?
在没有时区的时间戳的情况下,我无法解释你的行为,因为这不会发生在我这边。
在timestamp with time zone的情况下,情况比较复杂:在02:00:00和02:59:59之间,系统将字符串转换为timestamp,同时由于switch将偏移量增加1从冬令时到夏令时,并将时间增加 1 小时,因为 02:00:00+01(冬令时)= 03:00:00+02(夏令时)。
问题是在 03:00:00 时,转换不再将时间增加 1,以实现我们因切换而损失 1 小时的事实。
因此,字符串“03:00:00”被转换为时间戳“03:00:00+02”,即时间戳“03:59:59+02”之前的 59 分 59 秒从字符串 '02:59:59' 转换而来。从时间轴的角度来看,字符串 '03:00:00' 和 '02:59:59" 的转换不一致。
我在这一点上提出了一个错误,建议禁止在“2003-03-30 02:00:00”和“2003-03-30 02:59:59”之间转换字符串,并带有一条明确的消息:由于冬令时/夏令时切换,相应的时间间隔从未存在过。
Here 是包含 Tom Lane 回答的错误报告
Here是相关文档
好的,这个问题与 Postgresql 无关。我使用 dbeaver 作为客户端与 Posgresql 进行通信。为了解决这个问题,我必须在 dbeaver 选项中禁用 data/time 格式:
看看这个issue。
特别是这个 comment.