Postgresql:如何从时间戳、时区字段正确创建带有时区的时间戳

2024-05-01

我有一个带有时间戳但没有时区的表。 年-月-日 时:分:秒

以及“时区”字段,“P”代表太平洋,“M”代表山地。

我需要创建一个“带有时区的时间戳”类型的字段

鉴于我有两个字段,有没有办法正确考虑夏令时?

具体来说: 时间戳: 2013-11-03 01:00:00 时区:“P” 将变为:2013-11-03 01:00:00-07

和 时间戳: 2013-11-03 03:00:00 时区:“P” 将变为:2013-11-03 03:00:00-08


和...之间的不同TIMESTAMP WITHOUT TIME ZONE and TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ)如果你考虑他们的名字,可能会很难理解。 (事实上​​,这些规范似乎非常混乱,因此各种 RDBMS 以不同的方式实现它。)

在 PostgreSQL 中,这两种类型都存储值存储时的时区,但是TIMESTAMPTZ根据 UTC 参考将该值存储为精确的瞬时时间,而TIMESTAMP WITHOUT TIME ZONE总是相对的。

  • 当询问时,一个TIMESTAMPTZ将被调整为表示最初存储的同一时刻(无论在世界的哪个部分),以及客户端配置的当前时区的时刻。
  • A TIMESTAMP WITHOUT TIME ZONE相对于客户端配置的时区,它将始终是相同的值,即使您查询的时区不同:2013-11-03 03:00:00将是不明确的并且取决于客户端设置。

据推测,您使用了“时区”列(P or M) 和你的TIMESTAMP WITHOUT TIME ZONE来弥补其中的歧义input value.

原则上,如果您与存储时间戳的相对时区处于相同的相对时区,则应该得到相同的值,因此如果您已将客户端设置为US/Pacific时区以及您是否已存储2013-11-03 03:00:00在你的P时区,你应该得到2013-11-03 03:00:00后退。然而,这仅在相对值不存在歧义的情况下才有效。

第一个示例中的问题是已经存在一些歧义:

时间戳:2013-11-03 01:00:00 时区:“P”将变为:2013-11-03 01:00:00-07

2013-11-03 01:00:00可以代表两个不同的时刻US/Pacific时区,所以只需2013-11-03 01:00:00 and "P",您已经丢失了无法恢复的信息。

如果您只是希望它根据当时的 DST 设置在“-08”和“-07”之间更改,那么这会自动为您完成,但您应该使用TIMESTAMPTZ首先,准确地说是你所代表的时间点。

这是保留初始时区的示例,因此您可以看到“-08”和“-07”之间的变化:

SET time zone 'US/Pacific';

SELECT t AS "Date/Time for US/Pacific",
       t AT time zone 'UTC' "Date/Time in UTC"
FROM (VALUES
    ('2013-11-03 00:00:00-07'::timestamptz),
    ('2013-11-03 01:00:00-07'::timestamptz),
    ('2013-11-03 02:00:00-07'::timestamptz),
    ('2013-11-03 03:00:00-07'::timestamptz)) AS v(t);

Results:

| DATE/TIME FOR US/PACIFIC | DATE/TIME IN UTC    |
|--------------------------|---------------------|
| 2013-11-03 00:00:00-07   | 2013-11-03 07:00:00 |
| 2013-11-03 01:00:00-07   | 2013-11-03 08:00:00 |
| 2013-11-03 01:00:00-08   | 2013-11-03 09:00:00 |
| 2013-11-03 02:00:00-08   | 2013-11-03 10:00:00 |

不幸的是,仅用两个字段无法处理 DST 更改。

这当然值得一读PostgreSQL 手册的日期/时间类型部分 http://www.postgresql.org/docs/current/static/datatype-datetime.html,以及注意表中的“返回类型”列AT TIME ZONE文档 http://www.postgresql.org/docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-ZONECONVERT为了更好地理解这些问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgresql:如何从时间戳、时区字段正确创建带有时区的时间戳 的相关文章

  • 如何创建不返回任何内容的函数

    我想写一个函数pl pgsql 我在用着Postgres 企业管理器 v3并使用 shell 来创建一个函数 但在 shell 中我必须定义返回类型 如果我不定义返回类型 我将无法创建函数 如何创建一个不返回结果的函数 即创建一个新表的函数
  • Google App Engine Flexi 上 Django 的 Postgres 设置

    我正在尝试在应用程序引擎灵活环境中使用 postgres 设置 django 我按照这里的说明进行操作 https cloud google com appengine docs flexible python using cloud sq
  • 从 Django 调用 Postgres SQL 存储过程

    我正在开发一个带有 Postgresql 数据库的 Django 项目 我编写了一个可以在 Postgres 上完美运行的存储过程 现在我想从 Django 1 5 调用该存储过程 我已经编写了代码 但它提示错误 CREATE FUNCTI
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • 如何存储没有年份部分的生日?

    类似问题 Postgres 生日选择 https stackoverflow com questions 6913719 postgres birthdays selection 我们正在设计一项新功能 我们将存储人们生日的月份和日期部分
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • 如何创建没有循环关系的树形表?

    CREATE TABLE TREE node1 id UUID REFERENCES nodes object id NOT NULL node2 id UUID REFERENCES nodes object id NOT NULL CO
  • mysql 如何将 varchar(10) 转换为 TIMESTAMP?

    我已将所有日期存储到数据库中varchar 10 现在我想将它们转换为 TIMESTAMP 当我运行sql时 ALTER TABLE demo3 CHANGE date date TIMESTAMP NOT NULL 它提醒 1292 In
  • Mac 上用户“postgres”的密码身份验证失败

    我在创建新的 psql 用户时遇到问题 因为我无法以 postgres 身份登录 psql 我已尝试过 1 sudo u postgres psql 2 sudo u postgres createuser img site P s e 他
  • PostgreSQL 和锁定

    希望一些比我更聪明的 DBA 可以帮助我找到一个好的解决方案来完成我需要做的事情 为了便于讨论 我们假设我有一个名为 work 的表 其中包含一些列 其中一列表示给定客户端对该行工作的所有权 场景是 我将连接 2 个客户端并轮询表以查找要完
  • 使用 SQL 完全复制 postgres 表

    免责声明 这个问题和栈溢出问题类似here https stackoverflow com questions 198141 copy a table including indexes in postgres 但这些答案都不适用于我的问题
  • postgresql中的按日期聚合函数分组

    我在运行此查询时遇到错误 SELECT date updated at count updated at as total count FROM persons WHERE persons updated at BETWEEN 2012 1
  • 使用所有连接的 Flask unittest 和 sqlalchemy

    在进行了大约 100 个单元测试后 我刚刚在 Flask 应用程序上运行单元测试时遇到了问题 所有单元测试都会通过 但是当一次全部运行时 它们将失败并出现以下错误 OperationalError OperationalError FATA
  • 如何在 PostgreSQL 9.5 中执行 INSERT INTO SELECT 和 ON DUPLICATE UPDATE?

    我正在尝试在 PostgreSQL 中执行以下操作 INSERT INTO blog sums blog id date total comments SELECT blog id 2016 09 22 count comment id a
  • 如何在Windows的node js中设置默认时区

    我正在尝试在应用程序启动时设置时区 set TZ UTC node main js 但这不起作用 main js var tz process env TZ var date new Date console log tz date UTC
  • 如何创建包含多列MD5的GENERATED列?

    我尝试在 PostgreSQL 14 3 中添加下表 CREATE TABLE client cache id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY request VARCHAR
  • 在 Java 中将日期从 UTC 转换为 PST

    我需要将日期从 Google App Engine 本地服务器时区转换为 Java 中的太平洋时间 我尝试使用 Calendar calstart Calendar getInstance calstart setTimeZone Time
  • 使用 Symfony 3 / Doctrine 进行属性形式的一对多对一

    问题是这样的 我有一个包含 3 个类的模型 person 人员 工作 job 一个人可以有多个工作 任何工作与人的关系都可以有 date start 属性 date end 和 comment 因此 我使用持有这些属性的可连接 person
  • PostgreSQL 窗口函数:row_number() over(按 col2 分区 col 顺序)

    以下结果集源自具有一些连接和联合的 SQL 查询 SQL 查询已经对 Date 和 game 上的行进行了分组 我需要一列来描述按日期列分区的游戏的尝试次数 Username Game ID Date johndoe1 Game 1 100

随机推荐

  • Web 服务版本控制策略的优缺点

    更新20100224 我真的不需要某些供应商网站上的一些蹩脚定义 我正在寻找的是实际实施以及实际实施这些东西的人们在日常 IT 业务周期中面临的挑战 更多内容如下 尚未制定 采用任何退休策略 显然需要制定一项策略 我对您如何制定该战略并将其
  • 矩形相当于文本的文本锚点表示属性吗?

    是否有一个与文本的文本锚点表示属性等效的矩形 我希望能够从左侧 右侧或根据情况定位矩形 我知道这可以通过一些简单的计算来完成 但我只是想知道是否已经存在内置的东西 文本锚点演示属性上的链接 https developer mozilla o
  • Shutil.rmtree() 引发异常 WindowsError:访问被拒绝:

    尝试使用 python 脚本自动删除文件 我得到 Traceback most recent call last Python script 5 line 8 in
  • 减少 CSS 网格中的行间距

    我想知道如何减少行间距 我尝试过将边距和填充设置为 0 但似乎没有什么效果 左侧为桌面视图 右侧为移动视图 content margin 0 padding 0 width 100 display grid grid gap 5px gri
  • 优化spark sql中分区数据写入S3

    我在每个 Spark 作业运行中从 HDFS 读取大约 700 GB 的数据 我的工作读取这些数据 过滤大约 60 的数据 将其分区如下 val toBePublishedSignals hiveCtx sql some query toB
  • 使用 PLINQ 扩展时是否会传输线程标识?

    我正在使用 AsParallel ForAll 在 ASP NET 请求上下文中并行枚举集合 枚举方法依赖于System Threading Thread CurrentPrincipal 我是否可以依赖用于将 System Threadi
  • 使用 crypto.getRandomValues() 生成 0 到 1 的随机数

    看起来 Math random 会生成 0 1 范围内的 64 位浮点数 而新的 crypto getRandomValues API 仅返回整数 使用此 API 生成 0 1 中的数字的理想方法是什么 这似乎有效 但似乎不太理想 ints
  • 如何避免获取 .repo/manifest.xml?

    如何避免获取 repo manifest xml 故意修改的 我不想在回购同步期间对其进行修改 我已经做了一个repo init 这一步就完成了 我对manifest xml做了一个小修改 删除了一些同步不需要的项目 当我们进行存储库同步时
  • 模数在 Javascript 中不起作用

    我试图理解为什么模运算不能按预期工作 我需要验证 IBAN 该算法包括进行取模 根据维基百科 在此输入链接描述 https en wikipedia org wiki International Bank Account Number Va
  • Hibernate加载惰性代理,但我只需要PK

    我有这些实体 Entity public class Room ManyToOne optional true fetch FetchType LAZY private Player player1 Entity public class
  • 如何使用openJDK11运行Eclipse?

    怎样必须eclipse ini看起来像是让 Eclipse Photon 2018 09 或 2018 12 在 openJDK11 上运行 我已经安装了 openJDK 11 0 1 和 Eclipse 2018 09 我有一个包含 XM
  • Java Swing并发显示JTextArea

    我需要执行 显示从 Arraylist 到 JTextArea 的一系列事件 但是 每个事件的执行时间不同 以下是我的目标的一个简单示例 public void start ActionEvent e SwingUtilities invo
  • 读/写结构到文件 - c

    我正在用 C 语言创建一个学生数据库 我需要做的最后一件事是能够读取我创建的数据库并将其写入文件 所以我已经有了一个充满指向学生结构的指针的数组 我需要将其写入文件 一旦我写完它 我也需要能够将它读回到我的数组中 我真的不知道该怎么做 这是
  • Google Colab:为什么 CPU 比 TPU 快?

    我正在使用 Google colabTPU训练一个简单的Keras模型 删除分布式strategy并在CPU比TPU 这怎么可能 import timeit import os import tensorflow as tf from sk
  • 我什么时候应该声明一个不带 noexcept 的移动构造函数?

    该标准不会在移动构造函数上强制执行 noexcept 在什么情况下移动构造函数可以抛出异常 当你真的别无选择的时候 大多数时候你的移动构造函数应该是noexcept 它们是默认的 看这个 http www codingstandard co
  • 更改 UITextField 占位符颜色

    如何动态更改占位符颜色UITextField 这始终是相同的系统颜色 xib 编辑器中没有选项 来自文档 property 非原子 复制 NSAttributedString attributedPlaceholder 该属性默认为零 如果
  • 为什么 SwiftMailer 发送两封电子邮件?

    我通过 PHP 的 SwiftMailer 库发送电子邮件 我有这个 PHP 代码 用于从 1 个发件人向 1 个电子邮件收件人发送 1 封电子邮件 这是代码 email some email recipient sendEmail sen
  • 你能限制 TypeScript 全局类型的范围吗?

    我们的团队已经配置了 TypeScript 来使jest全球可用的类型 tsconfig json types jest testing library jest dom 这真的很好 test ts文件 但今天我意识到它也接受jest 和相
  • Python ggplot 和 ggplotly

    前 R 用户 我曾经通过 ggplotly 函数广泛组合 ggplot 和plot ly 库来显示数据 刚接触 Python 时 我看到 ggplot 库可用 但找不到与用于图形反应显示的绘图简单组合的任何内容 我想要寻找的是这样的 fro
  • Postgresql:如何从时间戳、时区字段正确创建带有时区的时间戳

    我有一个带有时间戳但没有时区的表 年 月 日 时 分 秒 以及 时区 字段 P 代表太平洋 M 代表山地 我需要创建一个 带有时区的时间戳 类型的字段 鉴于我有两个字段 有没有办法正确考虑夏令时 具体来说 时间戳 2013 11 03 01