sqlite Safari History.db history_visits.visit_time的格式是什么?

tvmytwxo  于 2023-10-23  发布在  SQLite
关注(0)|答案(3)|浏览(132)

当从Safari查看History.db时,有一个名为history_visits的表,其中有一个名为visit_time的列,这是一个REAL值。它的值为470799793.096987。是什么格式的?我想看的格式是12/08/2015 05:12:05。

bq3bfh9z

bq3bfh9z1#

它是自2001年1月1日00:00:00 UTC以来的秒数。一定是从NSDate来的。
NSDate对象封装单个时间点,与任何特定的地理系统或时区无关。Date对象是不可变的,表示相对于绝对参考日期(2001年1月1日的00:00:00 UTC)的不变时间间隔。

  • NSDate Class Reference
    为了得到一个体面的人类价值,你必须添加978307200(2001-01-01 00:00:00的纪元)。
    这个查询应该给予你想要的:
.headers on

select datetime(v.visit_time + 978307200, 'unixepoch', 'localtime') as date, v.visit_time + 978307200 as epoch, v.visit_time, i.domain_expansion, i.url
from history_items i left join history_visits v on i.id = v.history_item
order by i.id desc
limit 100;

示例输出:

date|epoch|visit_time|domain_expansion|url
2015-12-31 11:51:27|1451562687.28465|473255487.284646|duckduckgo|https://duckduckgo.com/?q=current+timestamp+2015-12-31+11:51&t=osx
  • PS:仅供参考,Safari db文件位于~/Library/Safari/History.db *
7gyucuyw

7gyucuyw2#

我发现domain_expansion字段在某些情况下为null,下面是修改后的查询:

SELECT SUBSTR(
SUBSTR(url, INSTR(url, '/')+2),
1,
INSTR(SUBSTR(url, INSTR(url, '/')+2),'/') - 1
) domain,
url,
datetime(hv.visit_time + 978307200, 'unixepoch', 'localtime') visit_time 
FROM history_items hi
JOIN history_visits hv on hi.id = hv.history_item;
ryevplcw

ryevplcw3#

要转换Excel电子表格中 * history. db * 中的visit_time值,请在SQL Lite(Windows)的DB浏览器等工具中打开history.db文件,并将history_visits值导出到CSV文件。
打开CSV文件并创建一个列,在该列中以人类可读的时间(根据时区进行调整)填充值,然后使用以下公式转换NSDate:

=((((C2+978307200)/60)/60)/24)+DATE(1970,1,1)+(-5/24)

在上面的公式中,时间值位于单元格C2和我的时区GMT-5中。要调整到您自己的时区,请调整最后一组括号中的语句。现在我用(-5/24)来表示GMT-5
当我第一次处理这个转换时,我错误地认为history.db中的时间是epoch time,从1/1/1970开始,并且不明白为什么会有这样的时间偏差。添加所需的转换因子+978307200解决了这个问题。

相关问题