我正在使用postgreSQL 10.1。
我有以 UTC 创建的日期时间,时间戳没有时区列。我需要将这些返回为每个(GMT 或 BST(的正确英国当地时间。
我一直在尝试时区,时区 BST/GMT 似乎固定到它们自己的偏移量,无论时间戳发生在一年中的什么时候。
在时区"UTC"在时区"欧洲/伦敦"似乎给了我想要的东西,正确地将 UTC 时间戳显示为 GMT 或 BST(在我尝试过的小样本中(,尽管我找不到这个时区正确记录其夏令时规则。
谁能为我指出正确的方向,或者一个可靠的替代方案?
您的解决方案是正确的:
AT TIME ZONE 'UTC' AT TIME ZONE 'Europe/London'
第一个将 UTC 分配给时间戳,第二个从 UTC 转换为Europe/London
时区。
Postgres文档指出:
。PostgreSQL使用广泛使用的IANA(Olson(时区数据库来获取有关历史时区规则的信息。...
它还支持同一文档中引用的其他形式的时区,但Europe/London
是 IANA 时区。 您可以在此处的 IANA 时区列表中看到它。 您还可以通过在此处查看 TZDB 来源来查看如何定义此时区的详细信息,或在此处查看更易于阅读的伦敦时间变化历史。