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
我将日期时间存储在 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