C# Snippets

C# Unix 时间戳代码片段

C# 示例,涵盖当前纪元秒、毫秒、DateTimeOffset 转换、ISO 8601 输出,以及从日期字符串解析时间戳。

Current Unix timestamp (seconds)
DateTimeOffset.UtcNow.ToUnixTimeSeconds()
Current Unix timestamp (milliseconds)
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
DateTimeOffset from Unix timestamp
DateTimeOffset.FromUnixTimeSeconds(1700000000)
DateTimeOffset.FromUnixTimeMilliseconds(1700000000000)
ISO 8601 string from timestamp
DateTimeOffset.FromUnixTimeSeconds(1700000000)
    .UtcDateTime
    .ToString("O")
Timestamp from DateTimeOffset
var dt = DateTimeOffset.Parse("2023-11-15T06:13:20Z");
dt.ToUnixTimeSeconds();
dt.ToUnixTimeMilliseconds();

C# 时间戳基础

现代 C# 在处理 Unix 时间戳时应使用 DateTimeOffset。DateTimeOffset.UtcNow.ToUnixTimeSeconds() 返回 Unix 秒,ToUnixTimeMilliseconds() 返回与 JavaScript 兼容的毫秒。

转换 DateTimeOffset 值

使用 FromUnixTimeSeconds 或 FromUnixTimeMilliseconds 将纪元值转换为 DateTimeOffset。以 UTC 存储,并在需要 ISO 8601 字符串时用往返格式 O 进行格式化。

C# 生产注意事项

在处理时间戳时,DateTimeOffset 通常比 DateTime 更安全,因为它在值上保留了偏移。比较和持久化时存储 UTC 时刻,仅在显示时转换为本地时区。当集成方说「纪元时间」却未指明秒还是毫秒时要小心。

  • 标准 Unix 秒用 DateTimeOffset.UtcNow.ToUnixTimeSeconds()
  • 与 JavaScript 兼容的值用 ToUnixTimeMilliseconds()
  • 读取文档标注为秒的 API 值时用 FromUnixTimeSeconds()
  • 日志和 JSON 中的往返 ISO 8601 字符串用 O 格式

FAQ

时间戳代码应使用 DateTime 还是 DateTimeOffset?
处理 Unix 时间戳时优先使用 DateTimeOffset,因为它保留偏移上下文。它还提供直接的 Unix 秒和毫秒辅助方法。
O 格式有什么作用?
O 格式写出可往返的 ISO 8601 值。它适用于日志、JSON 和测试——这些场景中精确时刻应在解析后保持不变。
如何验证 C# 转换?
用 DateTimeOffset.FromUnixTimeSeconds 或 FromUnixTimeMilliseconds 把值转换回来,用 O 格式化,并在保存值之前把该 UTC 输出与你期望的时间戳比较。