【发布时间】:2018-10-07 06:59:10
【问题描述】:
有些时区会切换到夏令时而不是夏令时。我知道俄罗斯没有切换到这个时间,乌克兰切换到夏令时。
据我所知,.NET TimeZoneInfo from Olson time zone莫斯科使用俄罗斯标准时间,而基辅(乌克兰)使用 FLE 标准时间。
我的测试是:
冬天,俄罗斯,DateTimeKind.Utc
冬季,俄罗斯,DateTimeKind.Local
夏天,俄罗斯,DateTimeKind.Utc
夏天,俄罗斯,DateTimeKind.Local
冬季,基辅,DateTimeKind.Utc
冬季,基辅,DateTimeKind.Local
夏天,基辅,DateTimeKind.Utc
夏天,基辅,DateTimeKind.Local
我的电脑时间是 (UTC+00:00) 伦敦 +1 小时(现在是夏令时)。 在我的测试中,我使用了 15:00 的时间。 让它成为变量 dst=1 小时(对于我当地的夏令时),我想了解为什么我得到这个输出:
- 在俄罗斯 UTC+3,所以 15:00utc + 3 = 18:00
- 在俄罗斯 UTC+3,所以 15:00local + 3 = 18:00(dst*0 因为是冬天)
- 在俄罗斯 UTC+3,所以 15:00utc + 3 = 18:00
- 为什么是 17:00 ???(如何计算?)
- 在基辅 UTC+2,所以 15:00utc + 2 = 17:00
- 在基辅 UTC+2,所以 15:00local + 2 = 17:00
- 为什么是 18:00 ???(如何计算?)
- 为什么是 17:00 ???(如何计算?)
Windows 7
时区:(UTC+00:00) 都柏林、爱丁堡、里斯本、伦敦。
文化:英国
DateTime time = TimeZoneInfo.ConvertTime(new DateTime(2018, 11, 23, 15, 0, 0, DateTimeKind.Utc),
TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 11, 23, 15, 0, 0, DateTimeKind.Local),
TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Utc),
TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Local),
TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 11, 23, 15, 0, 0, DateTimeKind.Utc),
TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 11, 23, 15, 0, 0, DateTimeKind.Local),
TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Utc),
TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
Console.WriteLine(time);
time = TimeZoneInfo.ConvertTime(new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Local),
TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time"));
Console.WriteLine(time);
【问题讨论】: