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