C# 将日期时间从 UTC 转换为 GMT 或 BST

C# Convert DateTime to GMT or BST from UTC

我将日期时间存储在 SQL 中,它是从 UTC 的 Azure 服务器中检索到的。

当我从 SQL 中检索此日期时间时,日期时间种类未指定 ...

在英国,我们目前处于英国夏令时,我如何根据一年中的时间将从 SQL 收到的日期时间转换为英国夏令时或格林尼治标准时间?

我的 test/production 服务器在以 UTC 运行的 Azure 中。

回答

感谢@jonathon,我想出了以下扩展方法来解决我的问题。

      public static DateTime CovertDateTimeToDateTimeGmt(this DateTime source)
    {
        var sourceUtc = DateTime.SpecifyKind(source, DateTimeKind.Utc);
        var destinationTimezoneId = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
        var sourceLocalTime = TimeZoneInfo.ConvertTimeFromUtc(sourceUtc, destinationTimezoneId);
        return sourceLocalTime;
    }

因为我从 SQL 收到的日期时间没有指定日期时间类型,所以我首先将其转换为指定类型的新日期时间。

使用ConvertTimeFromUtc并指定要转换成的时区。必要时应考虑夏令时。

TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);

见: https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo.converttimefromutc?view=netcore-3.1

https://docs.microsoft.com/en-us/dotnet/standard/datetime/converting-between-time-zones