我正在将DB Browser用于SQlite。我的数据库还具有以18位时间戳记存储的日期时间。请在以下查询中帮助将其转换为本地时间:
SELECT * FROM message WHERE handle_id=52 ORDER BY date DESC;
我相信这是一种unix时间戳,因为数据库基于mac。 (Apple CoreD(纳秒)是时间戳格式,谢谢varro)这是db中的几个示例:
561774860770410304 559334672583377600
我遇到了另一个类似的问题(本地时间的18位时间戳),但询问者不需要任何特定语言或平台的答案。
谢谢,爱丽丝
答案 0 :(得分:2)
事先不知道时间戳格式,不可能给出确切的答案,但是我提交了此脚本(仅取决于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(纳秒)”是您的时间戳格式(请参见https://www.epochconverter.com/coredata)。
答案 1 :(得分:0)
我认为您的情况可能是这样的: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