C# 根据夏时制将日期时间(本地或utc)转换为莫斯科和基辅时区问题
有些时区可以切换到夏令时,也可以不切换。我知道俄罗斯不会改用这个时间,乌克兰改用夏令时 从这个链接中我知道莫斯科使用俄罗斯标准时间,基辅(乌克兰)使用FLE标准时间 我的测试是:C# 根据夏时制将日期时间(本地或utc)转换为莫斯科和基辅时区问题,c#,datetime,utc,dst,C#,Datetime,Utc,Dst,有些时区可以切换到夏令时,也可以不切换。我知道俄罗斯不会改用这个时间,乌克兰改用夏令时 从这个链接中我知道莫斯科使用俄罗斯标准时间,基辅(乌克兰)使用FLE标准时间 我的测试是: 冬季,俄罗斯,DateTimeKind.Utc 冬天,俄罗斯,DateTimeKind.本地 夏季,俄罗斯,DateTimeKind.Utc 夏天,俄罗斯,DateTimeKind.本地 冬季,基辅,DateTimeKind.Utc 冬天,基辅,DateTimeKind,本地 Summer,基辅,DateTimeKin
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);
因为时区“伦敦”不是UTC+0。冬季仅为UTC+0,但夏季为UTC+1
如果您在将日期转换为“FLE”之前使用UTC显示日期,您就会明白我的意思
例如:
var fleTimeZone = TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time");
var local = new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Local);
var utc = local.ToUniversalTime();
var fle = TimeZoneInfo.ConvertTime(local, fleTimeZone);
Console.WriteLine(TimeZoneInfo.Local);
Console.WriteLine(TimeZoneInfo.Local + ": " + local);
Console.WriteLine(TimeZoneInfo.Utc + ": " + utc);
Console.WriteLine(fleTimeZone + ": " + fle);
(UTC+00:00)都柏林、爱丁堡、利萨本、伦敦
(UTC+00:00)都柏林,爱丁堡,利萨本,伦敦:2018年8月2日15:00:00
UTC:02.08.2018 14:00:00
(UTC+02:00)赫尔辛基、基辅、里加、索非亚、塔林、威尔纳:2018年8月2日17:00:00
因为时区“伦敦”不是UTC+0。冬季仅为UTC+0,但夏季为UTC+1
如果您在将日期转换为“FLE”之前使用UTC显示日期,您就会明白我的意思
例如:
var fleTimeZone = TimeZoneInfo.FindSystemTimeZoneById("FLE Standard Time");
var local = new DateTime(2018, 8, 2, 15, 0, 0, DateTimeKind.Local);
var utc = local.ToUniversalTime();
var fle = TimeZoneInfo.ConvertTime(local, fleTimeZone);
Console.WriteLine(TimeZoneInfo.Local);
Console.WriteLine(TimeZoneInfo.Local + ": " + local);
Console.WriteLine(TimeZoneInfo.Utc + ": " + utc);
Console.WriteLine(fleTimeZone + ": " + fle);
(UTC+00:00)都柏林、爱丁堡、利萨本、伦敦
(UTC+00:00)都柏林,爱丁堡,利萨本,伦敦:2018年8月2日15:00:00
UTC:02.08.2018 14:00:00
(UTC+02:00)赫尔辛基、基辅、里加、索非亚、塔林、威尔纳:2018年8月2日17:00:00
正如nvoigt所解释的,伦敦的夏季时间(称为BST)是UTC+1。使用
DateTimeKind.Local
时,该值是计算机的本地值
因此,要完成图表,请执行以下操作:
4) 伦敦是UTC+1(英国夏令时),所以15:00英国夏令时=14:00 UTC。俄罗斯是UTC+3,所以14:00+3=17:00
7) 协调世界时15:00。基辅是UTC+3(EEST),所以15:00+3=18:00
8) 伦敦是UTC+1(英国夏令时),所以15:00英国夏令时=14:00 UTC。基辅是UTC+3,所以14:00+3=17:00
所有计算都按预期进行。正如nvoigt解释的那样,伦敦的夏季时间(称为BST)是UTC+1。使用
DateTimeKind.Local
时,该值是计算机的本地值
因此,要完成图表,请执行以下操作:
4) 伦敦是UTC+1(英国夏令时),所以15:00英国夏令时=14:00 UTC。俄罗斯是UTC+3,所以14:00+3=17:00
7) 协调世界时15:00。基辅是UTC+3(EEST),所以15:00+3=18:00
8) 伦敦是UTC+1(英国夏令时),所以15:00英国夏令时=14:00 UTC。基辅是UTC+3,所以14:00+3=17:00
所有的计算都按预期进行。嗯,我在这里挠头。。。你想知道它是如何增加一小时的吗?每小时加一个…嗯,在这里搔我的头。。。你想知道它是如何增加一小时的吗?在一小时内增加一个。。。