Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据夏时制将日期时间(本地或utc)转换为莫斯科和基辅时区问题_C#_Datetime_Utc_Dst - Fatal编程技术网

C# 根据夏时制将日期时间(本地或utc)转换为莫斯科和基辅时区问题

C# 根据夏时制将日期时间(本地或utc)转换为莫斯科和基辅时区问题,c#,datetime,utc,dst,C#,Datetime,Utc,Dst,有些时区可以切换到夏令时,也可以不切换。我知道俄罗斯不会改用这个时间,乌克兰改用夏令时 从这个链接中我知道莫斯科使用俄罗斯标准时间,基辅(乌克兰)使用FLE标准时间 我的测试是: 冬季,俄罗斯,DateTimeKind.Utc 冬天,俄罗斯,DateTimeKind.本地 夏季,俄罗斯,DateTimeKind.Utc 夏天,俄罗斯,DateTimeKind.本地 冬季,基辅,DateTimeKind.Utc 冬天,基辅,DateTimeKind,本地 Summer,基辅,DateTimeKin

有些时区可以切换到夏令时,也可以不切换。我知道俄罗斯不会改用这个时间,乌克兰改用夏令时

从这个链接中我知道莫斯科使用俄罗斯标准时间,基辅(乌克兰)使用FLE标准时间

我的测试是:

  • 冬季,俄罗斯,DateTimeKind.Utc

  • 冬天,俄罗斯,DateTimeKind.本地

  • 夏季,俄罗斯,DateTimeKind.Utc

  • 夏天,俄罗斯,DateTimeKind.本地

  • 冬季,基辅,DateTimeKind.Utc

  • 冬天,基辅,DateTimeKind,本地

  • Summer,基辅,DateTimeKind.Utc

  • Summer,基辅,DateTimeKind,本地

  • 我的电脑时间是(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:00本地+2=17:00
  • 为什么是18:00??(它是如何计算的?)
  • 为什么是17:00??(它是如何计算的?)
  • 视窗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);
    
    因为时区“伦敦”不是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


    所有的计算都按预期进行。

    嗯,我在这里挠头。。。你想知道它是如何增加一小时的吗?每小时加一个…嗯,在这里搔我的头。。。你想知道它是如何增加一小时的吗?在一小时内增加一个。。。