我有一个具有以下结构的表:
Column | Type | Default
------------+--------------------------+---------
start_time | timestamp with time zone |
end_time | timestamp with time zone |
created_at | timestamp with time zone | timezone('UTC'::text, now())
加上一些其他字段。
我也insert
将数据// INSERT statement
// INSERT INTO table (start_time, end_time) VALUES (?::timestamptz, ?::timestamptz);
// statement => PreparedStatement
// sample.start(), sample.end() => java.time.LocalDateTime
statement.setString(START_IDX, sample.start().format(DateTimeFormatter.ISO_DATE_TIME));
statement.setString(END_IDX, sample.end().format(DateTimeFormatter.ISO_DATE_TIME));
插入表中(在Java中,使用JDBC):
end_time
created_at
和psql
之间的可接受的差异应该是几秒钟。
但是现在当我查询-- LIMIT, ORDER BY removed for brevity
SELECT created_at, start_time, end_time FROM table
created_at | start_time | end_time
---------------------------+---------------------------+---------------
2018-09-27 09:13:07+05:30 | 2018-09-27 14:42:00+05:30 | 2018-09-27 14:43:00+05:30
我得到结果
+05:30
created_at
的末尾不应有09:13:07
!
我想这意味着Postgres将带有时区的时间戳 视为IST
处的09:13:07
,应该将其视为UTC
处的CREATE TABLE behaviour_sample (
sample JSON NOT NULL,
start_time TIMESTAMPTZ NOT NULL,
end_time TIMESTAMPTZ NOT NULL,
device CHAR(16) REFERENCES device(eui) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC')
);
!
这会进一步破坏很多东西!
所以,我的问题是,什么原因导致此问题?是错误(1%)?还是我身边缺少某些东西(99%)?
P.S。我在Windows 10 64位系统上并使用Postgres 10.3
表创建为
created_at
好的,所以我检查了我的其他表,它们也有类似的问题!
它们的共同点是{1>是使用
创建的created_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC')
字段
14:30:00 +05:30
因此,如果我在09:00:00 +05:30
处创建一条记录,则在查询时会显示utc
!时间为ist
,但时区为+05:30
(c = np.delete(a,b)
print(len(a))
print(a)
print(len(b))
print(b)
print(len(c))
print(c)
部分)