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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:54:26