将自2000年1月1日以来的纳秒转换为Postgresql中的时间戳

时间:2019-03-20 18:12:40

标签: postgresql

自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时间创建时间戳,但找不到为此的方法。

有人可以帮忙吗?

1 个答案:

答案 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)