我试图理解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,以及它在字符串末尾显示时区的不同方式
是其中一个改变了吗?哪一个显示真实数据?
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格式化日期)