GetCreationTimeUtc / GetCreationTime 其實都會有同樣的問題。
更正確地說 .NET 對檔案的 CreationTime 在 Windows 與 Unix-like (macOS、Linux…等,後面都統一稱呼 Linux) 的 OS 上定義不同。

個人目前工作上執行的任務大多是在將原本運作在 Windows 上透過 .NET 撰寫的產品應用程式,移植到 Linux 當中運作。
當過去在 Windows 上,產品程式透過 System.IO.File.GetCreationTimeUtc(path) 去取得檔案的 CreationTime 的時候,表現都相當正常。
但是將程式透過 Linux 執行時,System.IO.File.GetCreationTimeUtc(path) 取得檔案的 CreationTime 卻得到了不一樣的結果。
簡單的寫一段範例程式:
using System.Globalization;
var file = OperatingSystem.IsWindows() ? "c:\\tmp\\" :
OperatingSystem.IsLinux() ? "/mnt/c/tmp/" :
throw new PlatformNotSupportedException("Unsupported operating system.");
file += "video_2026_02_25_232416.mp4";
DateTime fileCreateTime = System.IO.File.GetCreationTimeUtc(file);
DateTime fileModifyTime = System.IO.File.GetLastWriteTimeUtc(file);
Console.WriteLine($"{file} createTime : {GetAccuracyTime(fileCreateTime)}, modifyTime : {GetAccuracyTime(fileModifyTime)}");
static string GetAccuracyTime(DateTime time) => time.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);執行前確定有一個 .mp4 檔案 "video_2026_02_25_232416.mp4",存在 "tmp" 資料夾當中。
如果透過 Windows 執行會得到類似下面的結果:

但如果是透過 Linux 執行就會得到類似下面的結果 (WSL 跑 Ubuntu 測試):

那透過作業系統本身的確認呢?
Windows 透過檔案總管,檢視檔案的內容資訊:

Linux 上則是透過 stat 指令查詢:

此為透過 WSL 的 Ubuntu 環境測試

此為透過 SoC 的 Linux 環境測試
上述很明顯的就發生了疑義。
發生這樣的問題,勢必要透過多方 AI 來驗證一下,用此 ".NET System.IO.File.GetCreationTimeUtc 查出來的資訊,在 Windows 上跟在 Linux 上不同?" 提問:
ChatGPT:
https://chatgpt.com/s/t_69a115913a3881919c2e473bb2ebbc05
Perplexity:
https://www.perplexity.ai/search/net-system-io-file-getcreation-HUaLVEeBQB2hZ.1l3mEH8w
Meta AI:

Gemini:

所以呢?
目前的解決方案是會透過 Linux 上的 stat 指令來取得檔案的 Birth 時間來進行處理。
I'm a Microsoft MVP - Developer Technologies (From 2015 ~).

I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.
If you want to know more about them, welcome to my website:
https://jamestsai.tw
本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。