C#中如何将Chromium内核浏览器WebKit时间戳转Unix时间戳
C# 实现Chromium WebKit时间戳转Unix时间戳
核心换算原理
Chromium内核使用的WebKit时间戳规则:
- 时间基准为
1601-01-01 00:00:00 UTC - 计数单位为微秒,你拿到的17位长度数值就是微秒级计数值
- Unix时间戳基准为
1970-01-01 00:00:00 UTC,常规秒级Unix戳单位为秒,毫秒级为毫秒
两个基准点的固定偏移量为11644473600000000微秒,直接做差即可完成基准对齐。
换算公式
- 秒级Unix时间戳 = (WebKit时间戳 - 偏移量) / 1000000
- 毫秒级Unix时间戳 = (WebKit时间戳 - 偏移量) / 1000
以你提供的样例值13332724148415168计算:
差值 = 13332724148415168 - 11644473600000000 = 1688250548415168 微秒
对应秒级Unix戳 = 1688250548,对应UTC时间为2023-07-01 14:29:08,符合Cookie过期时间的常规取值范围。
可直接复用的C#函数
注意所有数值使用long(Int64)类型,避免整数溢出:
/// <summary> /// Chromium WebKit微秒时间戳转秒级Unix时间戳 /// </summary> /// <param name="webkitTimestamp">17位WebKit时间戳</param> /// <returns>秒级Unix时间戳</returns> public static long ConvertWebKitToUnixSeconds(long webkitTimestamp) { const long offsetMicroseconds = 11644473600000000; return (webkitTimestamp - offsetMicroseconds) / 1000000; } /// <summary> /// WebKit时间戳转UTC DateTime对象 /// </summary> /// <param name="webkitTimestamp">17位WebKit时间戳</param> /// <returns>UTC标准时间</returns> public static DateTime ConvertWebKitToUtcTime(long webkitTimestamp) { const long offsetMicroseconds = 11644473600000000; long unixMs = (webkitTimestamp - offsetMicroseconds) / 1000; return DateTimeOffset.FromUnixTimeMilliseconds(unixMs).UtcDateTime; }
注意事项
- 不要使用
int类型存储时间戳数值,17位数值远超int类型的最大值范围,必然溢出 - 不建议直接用
DateTime.AddTicks换算:C# Ticks单位是100纳秒,和WebKit微秒是10倍换算关系,手动计算容易搞错量级,用固定偏移量做差的方式稳定性最高 - 转换后的Unix时间戳可直接用于Netscape Cookie格式的
expires字段写入,不需要额外做时区调整
内容的提问来源于stack exchange,提问作者Aman Choudhary
相关产品推荐
相关产品推荐

