You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询Chrome历史库转换Chromium时间戳为含毫秒可读时间方案

Chromium时间戳转换错误修复方案

错误原因

  • 年份计算偏差:原语句用strftime('%s', '1601-01-01')计算纪元偏移时未加utc修饰符,会按本地时区计算基准秒数,叠加部分SQLite版本对早期时间的时区规则计算异常,导致偏移量计算错误,最终年份错位。
  • 无小数秒输出:SQLite内置datetime()函数仅支持秒级精度输出,且原语句直接做整数除法丢弃了微秒余数,无法保留毫秒/百分秒部分。

正确SQL实现

以下语句可直接输出符合dd/mm/yyyy hh:mm:ss.ss要求的时间格式,和示例14/06/2022 10:05:30.25完全匹配:

SELECT
  u.url AS URL,
  u.title AS Title,
  u.visit_count AS "Visit Count",
  strftime('%d/%m/%Y %H:%M:%S', 
    (u.last_visit_time / 1000000) - 11644473600, 
    'unixepoch', 'localtime'
  ) || '.' || printf('%02d', (u.last_visit_time % 1000000) / 10000) AS "Last Visited Date Time",
  strftime('%d/%m/%Y %H:%M:%S', 
    (v.visit_time / 1000000) - 11644473600, 
    'unixepoch', 'localtime'
  ) || '.' || printf('%02d', (v.visit_time % 1000000) / 10000) AS "Visited Date Time"
FROM urls u, visits v
WHERE u.id = v.url

关键逻辑说明

  • Chromium时间戳以微秒为单位,纪元起点为1601-01-01 00:00:00 UTC,其与Unix纪元(1970-01-01 00:00:00 UTC)的固定秒差为11644473600,直接使用固定值计算可彻底避免时区、SQLite版本差异导致的基准偏移问题。
  • 小数秒部分通过取余运算% 1000000提取剩余微秒,除以10000后得到两位百分秒数值,用printf('%02d')补前导零后拼接在秒级时间后,即可得到要求的两位小数秒格式。
  • 若使用3.38.0以下版本的SQLite,unixepoch修饰符不支持负数时间戳,可将时间戳计算部分替换为u.last_visit_time / 1000000 + strftime('%s', '1601-01-01', 'utc'),转换效果完全一致。

内容的提问来源于stack exchange,提问作者PF6004

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:39:19