有一些时区可以切换到DayLight节省时间而不是 . 我知道俄罗斯不会转向这一次,而乌克兰则转向DayLight节省时间 .
据我所知,从这个链接.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 小时(现在是DayLight节省时间) . 在我的测试中,我使用时间15:00 . 让它变量dst = 1小时(对于我当地的DayLight节省时间),我想知道为什么我得到这个ouptut:
-
在俄罗斯UTC 3,所以15:00utc 3 = 18:00
-
在俄罗斯UTC 3,所以15:00本地3 = 18:00(dst * 0,因为它是冬天)
-
在俄罗斯UTC 3,所以15:00utc 3 = 18:00
-
Why it is 17:00 ??? (如何计算?)
-
在基辅UTC 2,所以15:00utc 2 = 17:00
-
在基辅UTC 2,所以15:00local 2 = 17:00
-
Why it is 18:00 ??? (如何计算?)
-
Why it is 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);
2 回答
正如nvoigt所解释的那样,伦敦的夏令时(称为BST)是UTC 1.当您使用
DateTimeKind.Local
时,该值是您机器的本地值 .因此,要完成您的图表:
4)伦敦是UTC 1(BST)所以15:00 BST = 14:00 UTC . 俄罗斯是UTC 3,所以14:00 3 = 17:00
7)UTC时间15:00基辅是UTC 3(EEST),所以15:00 3 = 18:00
8)伦敦是UTC 1(BST)所以15:00 BST = 14:00 UTC . 基辅是UTC 3,所以14:00 3 = 17:00
所有计算都按预期工作 .
因为时区"London"不是UTC 0.冬天只有UTC 0,夏天只有UTC 1 .
如果您将日期转换为“FLE”,请以UTC显示,您将看到我的意思 .
例: