使用 Blazor 服务器端天气应用程序将 Unix、UTC 格式的数据接收时间 (dt) 从 API 调用转换为传统日期格式

Converting Data Receiving Time (dt) in Unix, UTC format from API Call into traditonal date format using Blazor Server-Side Weather App

抱歉,如果这个问题在其他地方得到了充分的回答,我似乎无法从许多现有的关于 unix 转换的帖子中拼凑出解决方案。我构建了一个粗略的 Blazor 服务器端天气预报应用程序,它调用天气预报 API 和 returns 七天预报,每一天都以 unix、utc 格式日期区分(例如:{" dt":1631293200})。我已经能够成功显示调用结果如下:

 <tbody>
            @foreach (var w in forecast.daily)
            {
                <tr>
                    <td>@w.dt</td>
                    <td>@w.temp?.min F°</td>
                    <td>@w.temp?.max F°</td>
                    <td>@w.temp?.day F°</td>
                </tr>
            }
        </tbody>

有没有一种简单的方法可以在使用 C# 的 Blazor 服务器端应用程序中将“dt”结果转换为更易识别的日期,例如“9 月 13 日星期五”或“21 年 9 月 13 日” ?

如何将 unix utc 转换为本地时间。

您可以相应修改。

unix 时间戳就是自纪元以来经过的秒数。

public static class TimeUtils
{
        public static DateTime UnixTimeStampToDateTime(double unixTimeStamp )
        {
            // The unix timestamp is how many seconds since the epoch time
            // so just substract
            var epochDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            epochDateTime = epochDateTime .AddSeconds( unixTimeStamp ).ToLocalTime();
            return dateTime;
        }
}

然后您可以将该 DateTime 转换为您希望的任何字符串格式

例如

myDateTime.ToLongDateString()

因此,如果您在名为 TimeUtils 的静态 class 中有一个方法,并假设 w.dt 是一个双精度数:

        <tbody>
            @foreach (var w in forecast.daily)
            {
                <tr>
                    <td>@(TimeUtils.UnixTimeStampToDateTime(w.dt).ToLongDateString())</td>
                    <td>@w.temp?.min F°</td>
                    <td>@w.temp?.max F°</td>
                    <td>@w.temp?.day F°</td>
                </tr>
            }
        </tbody>

正如@Alexander Petrov 所指出的,还有另一种方法使用

DateTimeOffset.FromUnixTimeSeconds

其中returns一个DateTimeOffset对象。这也可以作为替代方案。