首页 > 后端开发 > C++ > 如何在我的应用程序中显示用户友好的构建日期而不是构建编号?

如何在我的应用程序中显示用户友好的构建日期而不是构建编号?

Susan Sarandon
发布: 2025-01-22 01:11:12
原创
762 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板