自2000年1月1日以来,我当前正在查询带有以纳秒表示的时间戳列的数据库。例如,我有值:
600393600000000000
可以使用以下代码(以Dart编写,但仅作为示例)将其转换为日期:
DateTime epoch = new DateTime(2000, 1, 1);
var date = epoch.add(new Duration(microseconds:(600393600000000000 / 1000).floor()));
print(date);
这将打印:
2019-01-10 00:00:00.000
我的目标是通过查询而不是使用任何应用程序代码将其转换为postgresql时间戳。我知道postgresql具有to_timestamp()函数,该函数可用于从Unix时间创建时间戳,但找不到为此的方法。
有人可以帮忙吗?
答案 0 :(得分:1)
正如已经提到的,使用以下构造:
to_timestamp(extract(epoch from '2000-01-01 00:00:00Z'::timestamptz) + (<your_nanos>::decimal / 1000000000))
...例如:
select to_timestamp(extract(epoch from '2000-01-01 00:00:00Z'::timestamptz) + (600393600123456789::decimal / 1000000000));
...产量:
to_timestamp
-------------------------------
2019-01-10 00:00:00.123457+00
(1 row)