PostgreSQL中的SQL时间戳

问题描述 投票:1回答:1

我试图理解PostgreSQL保存timestamp数据类型的原始方式。根据我使用的客户端,我得到2个不同的结果:

1. psql

# SELECT date_incorporated FROM client;

   date_incorporated    
------------------------
 2017-06-14 19:42:15-04

2. records python模块

rows = db.query('SELECT date_incorporated FROM client')
print(rows[0])
# {"date_incorporated": "2017-06-14T19:42:15-04:00"}

由于psql接口和records模块都应该给我回原始数据,我无法理解为什么两者都给了我不同格式的存储时间戳。

到目前为止我看到的两个差异是T版本中日期和时间之间的records,以及它在字符串末尾显示时区的不同方式

是其中一个改变了吗?哪一个显示真实数据?

python sql postgresql psql datetime-format
1个回答
1
投票

https://www.postgresql.org/docs/current/static/datatype-datetime.html

所有时区感知日期和时间都以UTC格式存储在内部。在显示给客户端之前,它们将在TimeZone配置参数指定的区域中转换为本地时间。

https://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-OUTPUT

日期/时间类型的输出格式可以设置为ISO 8601,SQL(Ingres),传统POSTGRES(Unix日期格式)或德语四种样式之一。默认为ISO格式。

例如:

t=# select now();
              now
-------------------------------
 2017-11-29 09:07:31.716276+00
(1 row)

t=# set datestyle to SQL;
SET
t=# select now();
              now
--------------------------------
 11/29/2017 09:07:52.341416 UTC
(1 row)

所以节省的时间不是它返回的方式。至少不是neseserely。您可以控制它返回到客户端的方式。 psql不处理时间。但是python呢。不是records我相信,但python本身

https://en.wikipedia.org/wiki/ISO_8601

T是在表示的时间分量之前的时间指示符。

并且T绝对不是由postgres本身添加的(除非你故意用qazxsw poi格式化日期)

© www.soinside.com 2019 - 2024. All rights reserved.