在查看Safari中的History.db时,会有一个名为history_visits
的表,其中有一个名为visit_time
的列,其值为REAL
。它具有470799793.096987
等值。它的格式是什么?我希望以12/08/2015 05:12:05等格式看到它。
答案 0 :(得分:17)
这是自2001年1月1日00:00:00 UTC以来的秒数。它必须来自NSDate
。
NSDate对象封装单个时间点,与任何特定的日历系统或时区无关。日期对象是不可变的,表示相对于绝对参考日期(2001年1月1日00:00:00 UTC)的不变时间间隔。
要获得合适的人类价值,您必须添加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
答案 1 :(得分:0)
要转换excel电子表格中 history.db 中的visit_time
值,请在DBLite(Windows)的数据库浏览器等工具中打开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中的时间是纪元时间,从1/1/1970
开始,并且不明白为什么会出现这样的时间偏差。添加所需的转换因子+978307200
解决了这个问题。
答案 2 :(得分:0)
我发现在某些情况下 domain_expansion 字段为空,这是一个修改后的查询:
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;