当查看Safari中的History.db时,有一个名为history_visits
的表,它有一个名为visit_time
的列,它是一个REAL
值。它具有诸如470799793.096987
之类的值。那是什么格式的?我想看到它的格式,如12/08/2015 05:12:05。
发布于 2015-12-31 12:29:12
这是2001年1月1日协调世界时00时以来的秒数。它一定是来自一个NSDate
。
NSDate对象封装一个时间点,独立于任何特定的日历系统或时区。Date对象是不可变的,表示相对于绝对引用日期(2001年1月1日UTC 00:00:00)的固定时间间隔。 - 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文件位于~/Library/Safari/History.db
发布于 2018-04-02 19:21:46
若要在excel扩展表中转换history.db中的history.db值,请在诸如DB for SQLLite (SQLLite)之类的工具中打开history.db文件,并将history_visits值导出到CSV文件。
打开CSV文件并创建一个列,在该列中,您将在调整到时区的人类可读的时间内填充值,并使用以下公式转换您的NSDate:
=((((C2+978307200)/60)/60)/24)+DATE(1970,1,1)+(-5/24)
在上面的公式中,时间值在单元格C2
和my GMT-5
中。若要调整到您自己的时区,请调整最后一组括号中的语句。目前我有(-5/24)
来代表GMT-5
。
当我第一次接近这个转换时,我错误地认为history.db中的时间是一个划时代的时间,从1/1/1970
开始,我不明白为什么会有这样的时间偏差。添加所需的转换因子+978307200
解决了这一问题。
发布于 2021-03-15 23:39:55
在某些情况下,我发现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;
https://stackoverflow.com/questions/34167003
复制相似问题