Safari History.db history_visits.visit_time 是什么格式?
What format is the Safari History.db history_visits.visit_time in?
从 Safari 查看 History.db 时,有一个名为 history_visits
的 table,它有一个名为 visit_time
的列,这是一个 REAL
值.它具有 470799793.096987
等值。那是什么格式的?我希望以 12/08/2015 05:12:05.
等格式查看它
这是自 2001 年 1 月 1 日 00:00:00 UTC 以来的秒数。它必须来自 NSDate
。
NSDate objects encapsulate a single point in time, independent of any particular calendrical system or time zone. Date objects are immutable, representing an invariant time interval relative to an absolute reference date (00:00:00 UTC on 1 January 2001).
要从中获得体面的人类价值,您必须添加 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
要将 history.db 中的 visit_time
值转换为 excel 价差 sheet,请打开 history.db 文件,例如用于 SQLLite (Windows) 的数据库浏览器,并将 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
解决了问题。
我发现 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;
从 Safari 查看 History.db 时,有一个名为 history_visits
的 table,它有一个名为 visit_time
的列,这是一个 REAL
值.它具有 470799793.096987
等值。那是什么格式的?我希望以 12/08/2015 05:12:05.
这是自 2001 年 1 月 1 日 00:00:00 UTC 以来的秒数。它必须来自 NSDate
。
NSDate objects encapsulate a single point in time, independent of any particular calendrical system or time zone. Date objects are immutable, representing an invariant time interval relative to an absolute reference date (00:00:00 UTC on 1 January 2001).
要从中获得体面的人类价值,您必须添加 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
要将 history.db 中的 visit_time
值转换为 excel 价差 sheet,请打开 history.db 文件,例如用于 SQLLite (Windows) 的数据库浏览器,并将 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
解决了问题。
我发现 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;