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 輸出與你期望的時間戳記比較。