Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memaparkan Tarikh Binaan Mesra Pengguna Daripada Nombor Binaan dalam Aplikasi Saya?

Bagaimanakah Saya Boleh Memaparkan Tarikh Binaan Mesra Pengguna Daripada Nombor Binaan dalam Aplikasi Saya?

Susan Sarandon
Susan Sarandonasal
2025-01-22 01:11:12791semak imbas

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

Paparkan tarikh binaan dengan cara yang mesra pengguna

Apabila memaparkan butiran binaan aplikasi anda, adalah penting untuk membentangkannya dalam format yang mudah difahami oleh pengguna. Kebanyakan pengguna kurang mengambil berat tentang nombor binaan dan lebih banyak tentang mengetahui sama ada mereka mempunyai versi terkini.

Nombor binaan pertanyaan dan tarikh

Walaupun boleh mendapatkan nombor binaan terus menggunakan Assembly.GetExecutingAssembly().GetName().Version.ToString(), mendapatkan tarikh binaan memerlukan pendekatan yang berbeza.

Dapatkan cap masa pemaut

Cara paling boleh dipercayai untuk menentukan tarikh binaan ialah mendapatkan cap masa pemaut dalam pengepala PE boleh laku. Cap masa ini mewakili masa boleh laku dibina.

Kod C# untuk mengekstrak cap masa pemaut

Joe Spivey menyediakan coretan kod C# untuk mengekstrak cap masa pemaut:

<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>

Contoh penggunaan

Untuk mendapatkan semula tarikh binaan dalam waktu tempatan, gunakan kod berikut:

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

Arahan tentang .NET Core

Walaupun kaedah ini berfungsi dalam .NET Core 1.0, kaedah ini ditamatkan selepas .NET Core 1.1 dan mungkin menghasilkan keputusan yang salah.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memaparkan Tarikh Binaan Mesra Pengguna Daripada Nombor Binaan dalam Aplikasi Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn