我将csv数据上传到postgres的表中。其中一列是带有纪元填充的字符变化列。进入的数据如下:
select
TIMESTAMP WITH TIME ZONE 'epoch' + timestamp::integer * INTERVAL '1 second' as timestamp
from
table
将纪元字符变化列转换为时间戳列,如下所示:
SELECT EXTRACT(TIMEZONE FROM timestamp) FROM table;
结果似乎很好,我继续说。我住在荷兰,在这里,我们每年有两次冬季夏季变化。显然我的数据没有区别。
我试图找出我目前的时区。我这样做了:
3,600.0000
导致:
show timezone
= Europe/Berlin
当我试图找出我的一般时区时,我得到了这个:
db.tx(async t => {
var file = await t.one(`insert into ui.user_datasets_files (user_dataset_id,filename) values (${itemId},'${fileName}') RETURNING id`);
var data = rows.map(row => {
return {
user_dataset_id: itemId,
file_id: file.id,
json_data: JSON.stringify(row)
};
});
const insert = pgPromise.helpers.insert(data, dataset_data_columns);
return t.none(insert);
}).then(() => callback()).catch(err => callback(err));
如何让我的时间戳识别夏天和冬天?或者我做错了什么?
答案 0 :(得分:2)
在将纪元值(为什么存储为字符串?)转换为timestamp with time zone
的所有创造性方法中,这是一个更有趣的方法。
简单而无聊的方式是
SET timezone = 'Europe/Berlin';
SELECT to_timestamp(1507656308);
to_timestamp
------------------------
2017-10-10 19:25:08+02
(1 row)
时区偏移为两小时,因为在10月10日,夏令时生效(中欧夏令时)。
事实上:
SELECT extract(timezone FROM to_timestamp(1507656308));
date_part
-----------
7200
(1 row)
所以一切都按预期工作,对吧?