下面这些 C# 示例以 Unix 秒作为通用基准,只有在运行时天然提供毫秒的地方才展示毫秒。复制之前先回答一个简单的问题:下游那个 API 要的是什么单位?
获取当前 Unix 时间
long seconds = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
long milliseconds = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
把时间戳转成 UTC
var instant = DateTimeOffset.FromUnixTimeSeconds(1700000000);
string iso = instant.UtcDateTime.ToString("O");
上生产前留意
DateTimeOffset 自带偏移信息,在 API 边界上比不带时区的 DateTime 安全得多。
值跨越系统边界时,把单位写进字段名里:createdAtSeconds 和 createdAtMs 是比 createdAt 长了点,但出事故的时候能省下不少猜测。
Frequent questions:
- Q: 处理时间戳该用 DateTime 还是 DateTimeOffset?
- A: 优先 DateTimeOffset,因为它保留了偏移信息,而且直接提供了 Unix 秒和毫秒的辅助方法。
- Q: O 格式说明符是做什么的?
- A: O 说明符会输出一个可往返(round-trip)的 ISO 8601 值。日志、JSON 和测试里都很好用,能保证解析回来还是同一个瞬间。
- Q: 怎么验证 C# 的转换结果?
- A: 用 DateTimeOffset.FromUnixTimeSeconds 或 FromUnixTimeMilliseconds 把值转回来,用 O 格式化,然后在保存之前把这个 UTC 输出和你预期的时间戳对一下。