.NET Ticks Converter

.NET Ticks 轉 Unix 時間戳轉換器

把 .NET Ticks 轉換為 Unix 時間。精確公式與大數支援。輸出:秒、毫秒、ISO 8601 與可讀格式。

自 0001-01-01 以來的 100 奈秒間隔數

目前時間 — .NET DateTime.Ticks
Unix 時間戳(秒)

什麼是 .NET ticks?

在 .NET 中,DateTime.Ticks 和 TimeSpan.Ticks 以 100 奈秒為單位度量時間。DateTime 的 tick 計數是自先發格里曆 0001 年 1 月 1 日 00:00:00 以來的 100 奈秒間隔數量。

  • 紀元:0001-01-01 00:00:00
  • 解析度:100 奈秒刻度(每秒 10,000,000)
  • 目前值約為 6.4 × 10^17
  • C#: DateTime.UtcNow.Ticks, DateTimeOffset.UtcNow.Ticks

如何將 .NET ticks 轉換為 Unix 時間戳記

0001-01-01 與 1970-01-01 之間相差 62,135,596,800 秒。把 ticks 除以 10,000,000 得到自西元 1 年起的秒,再減去這個偏移。

  • Unix seconds = Ticks / 10000000 − 62135596800
  • Unix milliseconds = Ticks / 10000 − 62135596800000
  • 範例:638355968000000000 → 1700000000 → 2023-11-14 22:13:20 UTC
  • 在 C# 中:new DateTimeOffset(dt).ToUnixTimeSeconds() 會替你完成

C# 程式碼與邊界情形

現代 .NET 提供 DateTimeOffset.ToUnixTimeSeconds() 和 ToUnixTimeMilliseconds(),以及反向的 DateTimeOffset.FromUnixTimeSeconds()。僅在與序列化資料互通時才直接使用 ticks。注意 DateTime.Ticks 會忽略 DateTimeKind,所以務必先正規化為 UTC。

  • C#: var unixSeconds = new DateTimeOffset(dt.ToUniversalTime()).ToUnixTimeSeconds();
  • C#: var dt = DateTimeOffset.FromUnixTimeMilliseconds(ms).UtcDateTime;
  • ticks 為 0 = 0001-01-01;DateTime.MaxValue.Ticks = 3155378975999999999
  • 這些值超過 JavaScript 安全整數,因此本轉換器使用 BigInt

相關時間戳記格式轉換器

函式庫與序列化注意事項

ticks 會出現在較舊的 .NET 序列化格式和 JSON 慣例中。請注意:

  • 舊版 Microsoft JSON 日期:"/Date(1700000000000+0000)/" 包裹的是毫秒(不是 ticks)
  • DateTimeOffset.UnixEpoch 是現代 .NET 中標準的零點
  • DateTime.MaxValue.Ticks = 3155378975999999999;如此高的值幾乎肯定表示「從不」哨兵值
  • TimeSpan.Ticks 是相同單位但作為時長度量;不要盲目地用 TimeSpan tick 去減 DateTime tick
  • Newtonsoft.Json 和 System.Text.Json 都預設使用 ISO 8601——在可選時優先用它而非原始 ticks

FAQ

一秒有多少個 tick?
正好 10,000,000 個 tick——每個 tick 是 100 奈秒。
.NET tick 與 Windows FILETIME 有什麼區別?
兩者都使用 100 奈秒單位,但 .NET tick 從 0001-01-01 開始計數,而 FILETIME 從 1601-01-01 開始計數。兩者相差固定偏移 504,911,232,000,000,000 個 tick。
如何從 C# 的 DateTime 取得 Unix 時間?
使用 new DateTimeOffset(dateTime.ToUniversalTime()).ToUnixTimeSeconds() 或 .ToUnixTimeMilliseconds()。