繁体   English   中英

为什么在非夏令时,TimeZoneInfo.GetSystemTimeZones()不能使用UTC显示正确的小时偏移量?

[英]Why TimeZoneInfo.GetSystemTimeZones() is not showing the correct hour offset with UTC in non daylight saving dates?

我正在尝试获取时区和UTC之间的小时数差异。 我将机器的日期更改为7月的某个日期,这样我就不考虑白天了,并运行下面的两个代码段。 LinqPad中一个,SSMS中一个。 我在太平洋时间。 为什么TimeZoneInfo.GetSystemTimeZones()无论当前时间是否为夏时制总是报告-8,而SQL Server根据夏时制报告-7或-8?

有没有一种方法可以使TimeZoneInfo.GetSystemTimeZones()显示实际的小时偏移量,还是固定的? 我没有看到用于此的参数。

C#:

TimeZoneInfo local = TimeZoneInfo.Local;
TimeZoneInfo.ClearCachedData();
var sb = new StringBuilder();
foreach (var tzi in TimeZoneInfo.GetSystemTimeZones())
{
    sb.AppendFormat(" {0}| {1} | {2} | {3} | {4}",

                    tzi.BaseUtcOffset.TotalHours,
                    tzi.StandardName,
                    tzi.DisplayName,
                    tzi.DaylightName,
                    tzi.SupportsDaylightSavingTime);
    sb.AppendLine();
}

string table = sb.ToString().Dump(); // Always -8 for Pacific. Why?

SQL:

SELECT DATEDIFF(hh,GETUTCDATE(),GETDATE())  -- -7 o -8. This is expected

您正在使用BaseUtcOffset ,这是没有 DST调整的区域时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM