【问题标题】:18 digit time stamp to local time within SQL querySQL 查询中本地时间的 18 位时间戳
【发布时间】:2019-02-26 20:03:12
【问题描述】:

我正在为 SQlite 使用数据库浏览器。我的数据库还有存储在 18 位时间戳中的日期时间。请帮助在此查询中将其转换为当地时间:

SELECT * FROM message WHERE handle_id=52 ORDER BY date DESC;   

我相信这是一种 unix 时间戳,因为 db 是基于 mac 的。 (Apple CoreD (nanosec) 是时间戳格式,感谢 varro)以下是数据库中的几个示例:

561774860770410304 559334672583377600   

我遇到了另一个类似的问题(当地时间的 18 位时间戳),但提问者不需要任何特定语言或平台的答案。

谢谢,爱丽丝

【问题讨论】:

  • 那不是unix时间戳,值太大了。当前时间戳(以秒为单位)在 1551214245 左右(在本地 unix 机器上运行 date '+%s' 以获取它),即使 ti 以毫秒为单位,您仍然相差 5 个数量级。
  • macos APFS 时间戳是 UNIX 纪元的 64 位纳秒分辨率,因此 559334672 是 09/22/1987 @ 6:44pm (UTC) 而 561774860 是 10/21/1987 @ 12:34am ( UTC)...这些对您的数据有意义吗?
  • 不,日期在过去一两年内。

标签: sqlite


【解决方案1】:

在事先不知道时间戳格式的情况下,无法给出明确的答案,但我提交了这个脚本(仅依赖于 sqlite3 命令行工具)来帮助:

#!/bin/sh

printf "Enter timestamp: "
read number

sqlite3 <<EOS
.mode column
.width 12, 20

select 'Number:',     $number;
select 'Unix epoch:', datetime($number, 'unixepoch');
select 'Variant:',    datetime($number, 'unixepoch', '-70 years');
select 'Julian day:', datetime($number);
select 'Mac HFS+:',   datetime($number, 'unixepoch', '-66 years');
select 'Apple CoreD:';
select '  (seconds)', datetime($number, 'unixepoch', '+31 years');
select '  (nanosec)', datetime($number/1000000000, 'unixepoch', '+31 years');
select 'NET:',        datetime($number/10000000, 'unixepoch', '-1969 years');
EOS

如果您运行此脚本并输入您的号码561774860770410304,您将看到以下内容:

% Enter timestamp: 561774860770410304
Number:       561774860770410304
Unix epoch:   -
Variant:      -
Julian day:   -
Mac HFS+:     -
Apple CoreD:
  (seconds)   -
  (nanosec)   2018-10-21 00:34:20
NET:          1781-03-12 09:14:37

我猜可能“2018-10-21 00:34:20”是您的时间戳,因此“Apple CoreD (nanosec)”是您的时间戳格式(请参阅https://www.epochconverter.com/coredata)。

【讨论】:

  • 是的,谢谢,这符合我的日期。它是 Apple CoreD。
  • 它与我的匹配,它是 NET。谢谢!
【解决方案2】:

我认为您的情况可能是这样的:https://stackoverflow.com/a/36822906/10498828
不同之处在于您的日期值以纳秒为单位,因此您需要先除以 1000000000:

select datetime(datecolumn/1000000000 + 978307200, 'unixepoch') from message 

对于这些值:

561774860770410304 559334672583377600

上面的代码给出:

2018-10-21 00:34:20 2018-09-22 18:44:32

【讨论】:

  • 这对我有用!非常感谢你!也感谢所有提供帮助和线索的人。
猜你喜欢
  • 2014-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多