当前位置: 首页 > 知识库问答 >
问题:

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

周苑博
2023-03-14

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

正如我从这个链接中知道的.NET 时区信息来自奥尔森时区莫斯科使用俄罗斯标准时间,基辅(乌克兰)使用 FLE 标准时间。

我的测试是:

>

  • 冬季,俄罗斯,DateTimeKid. Utc

    冬天,俄罗斯,日期时间。当地的

    Summer,俄罗斯,DateTimeKind.Utc

    夏天,俄罗斯,DateTimeKind。当地的

    温特,基辅,DateTimeKid. Utc

    冬季,基辅,日期时间种类。当地的

    夏天, 基辅, 日期时间种类.UTC

    夏天,基辅,日期时间。当地的

    我的PC时间是(UTC 00:00)伦敦1小时(现在是夏令时)。在我的测试中,我使用的时间是15:00。假设它是可变的dst=1小时(对于我的本地夏令时),我想知道为什么我得到这个输出:

      < li >在俄罗斯,UTC 3,所以15:00utc 3 = 18:00 < li >在俄罗斯,UTC 3,所以15:00local 3 = 18:00 (dst*0,因为现在是冬天) < li >在俄罗斯,UTC 3,所以15:00utc 3 = 18:00 < li >为什么现在是17:00???(是如何计算的?) < li >在基辅,UTC 2,所以15:00utc 2 = 17:00 < li >基辅采用UTC 2,因此15:00local 2 = 17:00 < li >为什么现在是18:00???(是如何计算的?) < li >为什么现在是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个答案

    邹高峻
    2023-03-14

    正如nvoigt所解释的那样,伦敦的夏令时(称为BST)是UTC 1。使用 DateTimeKind.Local 时,该值是计算机的本地值。

    因此,要完成您的图表:

    4)伦敦是世界协调时1(英国夏令时),所以英国夏令时15:00=世界协调时14:00。俄罗斯是世界协调时3,所以14:00 3=17:00

    7)世界协调时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

    所有计算都按预期工作。

    长孙泉
    2023-03-14

    因为时区“伦敦”不是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)都柏林、爱丁堡、利萨邦、伦敦

    (世界协调时00:00)都柏林,爱丁堡,利萨邦,伦敦: 02.08.2018 15:00:00

    世界协调时:2018年8月2日14时00分

    (世界协调时02:00)赫尔辛基、基尤、里加、索菲亚、塔林、威尔纳: 02.08.2018 17:00:00

     类似资料:
    • 问题内容: 从服务器上,我得到了这种格式的datetime变量:它是UTC时间。我想使用JavaScript将其转换为当前用户的浏览器时间。 如何使用JavaScript或jQuery完成此操作? 问题答案: 在将字符串转换为javascript中的日期之前,将’UTC’附加到字符串中:

    • 问题内容: 我从我的API获取此日期字符串: 但是此日期为UTC格式,我想将其转换为当地时间,该怎么办? 我尝试了这个: 但是它返回了这个错误: 问题答案: 您的日期格式模式错误。改成: 有关更多信息,请参见SimpleDateFormat的javadoc。

    • 问题内容: 我有一个UTC时区,例如: 还有一个pytz时区对象: 转换为给定时区的正确方法是什么? 问题答案: 我想我明白了: 这行代码首先将朴素的(不了解时区的) 对象转换为包含时区(UTC)的对象。然后,它使用该功能根据请求的时区调整时间。

    • 问题内容: 这是我的约会日期“ 15-05-2014 00:00:00” 如何将IST转换为UTC即(到14-05-2014 18:30:00) 基于时区到UTC时区。 我的代码是 如果用户从任何区域输入相同的日期,则将获得UTC时间(例如:从澳大利亚,然后从15-05-2014 00:00:00到14-05-2014 16:00:00) 请任何建议。 问题答案: 您不能将日期值“转换为”其他时区

    • > 如何将IST转换为UTC,即(至2014年5月14日18:30:00) 我的代码是 > 如果用户从任何区域输入相同的日期,则将获得UTC时间(例如:从澳大利亚输入,然后是2014年5月15日00:00:00至2014年5月14日16:00:00) 请提出任何建议。

    • 我想把这个2021年1月20日20:10:14转换成yyyy-MM-dd'T'HH:MM:ss格式。Android系统中的SSS'Z'。目前我正在使用函数,但当我转换为本地格式时,我没有得到原始时间