Chrome的时间戳格式是什么?

时间:2013-12-08 20:07:08

标签: sqlite google-chrome timestamp

我正在使用SQLite数据库浏览器从包含Google Chrome浏览历史记录的数据库中读取信息。我在“执行SQL”面板中执行的当前代码如下所示:

SELECT last_visit_time,url,title
FROM urls
WHERE url LIKE {PLACEHOLDER} AND title LIKE {PLACEHOLDER}

出于隐私目的,“WHERE”行中的内容被{PLACEHOLDER}阻止。现在,我想让last_visit_time列中返回的数据可读,而不是像13029358986442901这样混乱的混乱。我该怎么做?如何将Chrome的时间戳转换为可读格式?如何按last_visit_time命令它(返回的行)?

6 个答案:

答案 0 :(得分:35)

答案在this question中给出:" [谷歌浏览器]的时间戳格式为自1601年1月以来的微秒数"

例如,在我的示例历史数据库中,查询

SELECT
  datetime(visit_time / 1000000 + (strftime('%s', '1601-01-01')), 'unixepoch')
FROM visits
ORDER BY visit_time DESC
LIMIT 10;

给出结果:

2014-09-29 14:22:59
2014-09-29 14:21:57
2014-09-29 14:21:53
2014-09-29 14:21:50
2014-09-29 14:21:32
2014-09-29 14:21:31
2014-09-29 14:16:32
2014-09-29 14:16:29
2014-09-29 14:15:05
2014-09-29 14:15:05

使用时间戳值13029358986442901:

SELECT
  datetime(13029358986442901 / 1000000 + (strftime('%s', '1601-01-01')), 'unixepoch')

结果是:

2013-11-19 18:23:06

答案 1 :(得分:9)

visits.visit_time自格林威治标准时间1601年1月1日起以微秒为单位,但与Windows文件时间相似,但不会被误认为是自1601年1月1日以来的100纳秒数。

  

琐事:为什么1601?
  我认为流行的答案是因为公历运行了400年的周期,1601是在Windows NT设计时活动的第一年。换句话说,它被选择使数学出来很好。 1601年1月1日是COBOL整数日期的起源。它也是ANSI日期格式的第1天。如果你根据它所采用的格式ISO8601进一步推测,ISO8601可以追溯到1581年。在1583年之前,时间是基于每年有366天的公历格里高利历。也许他们只是到了下个世纪。


downloads.start_time是自1970年1月1日UTC以来的秒数

  

琐事:为什么选择1970年?
  嗯,我很高兴你问过..它曾经不是。原来它是1971年1月1日,但后来四舍五入到1970年1月1日。1970年1月1日被认为是UNIX的诞生。 / p>

值得注意的是,Firefox将时间格式设置为1970年1月1日以来的微秒数,格式名称为PRTime

所有这些都采用ISO 8601 EPOCH格式。

答案 2 :(得分:5)

Chromes Timestap不是Unixepoch !!

Chrome的基准时间是01/01/1601 00:00:00。要计算当地时间,必须将Chrome时间除以百万分之一转换为秒,然后必须减去01/01/1601 00:00:00和01/01/1970 00:00:00之间的秒差。有两种方法可以做到这一点,即SQLite本身和Unix。

<强> SQLITE:

sqlite> SELECT strftime('%s', '1601-01-01 00:00:00');
-11644473600

<强>日期:

$ date +%s -d 'Jan 1 00:00:00 UTC 1601'
-11644473600

在上述两个命令中,“%s”代表unixepoch时间。这些命令计算unixepoch时间(1970)和后续日期(Chrome时基,1601)之间的秒数。请注意,秒数为负数。当然,这是因为你必须从1970年到1601年倒数!有了这些信息,我们可以在SQLite中转换Chrome时间,如下所示:

sqlite> SELECT datetime((time/1000000)-11644473600, 'unixepoch', 'localtime') AS time FROM table;

读好here

答案 3 :(得分:3)

我是编码的新手,所以我不确定你是如何用sql做的,但是我可以在c#中向你展示一个方法。我希望这会对某人有所帮助。

如果数据库中给出的时间值是:
13029358986442901.仅选择前11位数13029358986.您可以使用以下方法将其转换为时间:

DateTime dateTimeVar = new DateTime(1601,1,1).AddSeconds(time);

这里的答案是:19-11-2013 18:23:06 这是没有你的时区转换。

答案 4 :(得分:1)

这是一个转换WebKit时间的紧凑表达式:

sqlite> SELECT datetime(time/1e6-11644473600,'unixepoch','localtime') AS time FROM table;

答案 5 :(得分:0)

您可以减去11644473600000(unixepoch中的1/1/1601为-11644473600000),然后将其作为regulat unix epoch时间戳,假定为毫秒。

milis:11644473600000 秒:11644473600