我试图理解PostgreSQL保存timestamp数据类型的原始方式。根据我使用的客户端,我得到了两个不同的结果:
1. psql
# SELECT date_incorporated FROM client;
date_incorporated
------------------------
2017-06-14 19:42:15-042. 记录 python模块
rows = db.query('SELECT date_incorporated FROM client')
print(rows[0])
# {"date_incorporated": "2017-06-14T19:42:15-04:00"}由于psql接口和记录模块都应该将原始数据还给我,我不明白为什么它们给我的时间戳格式不同。
到目前为止,我看到的两个不同之处是T_s位于https://github.com/kennethreitz/records版本中日期和时间之间的中间,以及它在字符串末尾显示时区的不同方式。
他们中的一个在改变它吗?哪一个是显示真实数据的?
发布于 2017-11-29 09:13:18
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)这样就节省了时间,而不是返回的方式。至少不是大赦。你可以在一定程度上控制它如何返回给你的客户。psql不处理时间。但是python有。我相信不是records,而是python本身
T是表示法的时间分量之前的时间指示符。
而且T绝对不是由postgres自己添加的(除非您故意用to_char格式化日期)
https://stackoverflow.com/questions/47546388
复制相似问题