首頁 >後端開發 >C++ >如何在我的應用程式中顯示用戶友好的建置日期而不是建立編號?

如何在我的應用程式中顯示用戶友好的建置日期而不是建立編號?

Susan Sarandon
Susan Sarandon原創
2025-01-22 01:11:12763瀏覽

How Can I Display a User-Friendly Build Date Instead of a Build Number in My Application?

以使用者友善的方式顯示建置日期

在顯示應用程式的建置詳細資訊時,以使用者易於理解的格式呈現至關重要。大多數用戶不太關心建立編號,更想知道他們是否擁有最新版本。

查詢建構編號與日期

雖然使用Assembly.GetExecutingAssembly().GetName().Version.ToString()可以直接取得建置編號,但取得建置日期則需要不同的方法。

擷取連結器時間戳

確定建置日期最可靠的方法是檢索可執行檔的PE頭中的連結器時間戳記。此時間戳表示可執行檔建置的時間。

用來擷取連結器時間戳記的C#程式碼

Joe Spivey提供了一個C#程式碼片段,用於擷取連結器時間戳記:

<code class="language-csharp">public static DateTime GetLinkerTime(this Assembly assembly, TimeZoneInfo target = null)
{
    var filePath = assembly.Location;
    const int c_PeHeaderOffset = 60;
    const int c_LinkerTimestampOffset = 8;

    var buffer = new byte[2048];

    using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        stream.Read(buffer, 0, 2048);

    var offset = BitConverter.ToInt32(buffer, c_PeHeaderOffset);
    var secondsSince1970 = BitConverter.ToInt32(buffer, offset + c_LinkerTimestampOffset);
    var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

    var linkTimeUtc = epoch.AddSeconds(secondsSince1970);

    var tz = target ?? TimeZoneInfo.Local;
    var localTime = TimeZoneInfo.ConvertTimeFromUtc(linkTimeUtc, tz);

    return localTime;
}</code>

使用方法範例

要以本地時間檢索建置日期,請使用以下程式碼:

<code class="language-csharp">var linkTimeLocal = Assembly.GetExecutingAssembly().GetLinkerTime();</code>

關於.NET Core的說明

雖然此方法適用於.NET Core 1.0,但在.NET Core 1.1之後已被棄用,並可能產生錯誤的結果。

以上是如何在我的應用程式中顯示用戶友好的建置日期而不是建立編號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn