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 输出与你期望的时间戳比较。