Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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#-.net核心日期时间转换为UTC分钟偏移量_C#_.net_Datetime_.net Core - Fatal编程技术网

C#-.net核心日期时间转换为UTC分钟偏移量

C#-.net核心日期时间转换为UTC分钟偏移量,c#,.net,datetime,.net-core,C#,.net,Datetime,.net Core,我正在测试一个代码,发现了一个非常奇怪的行为。当我使用DateTime.MinValue时,将分钟添加到其中,并将其转换为UTC,我的本地时区和UTC之间似乎相差58分钟。我在中欧(冬季+1,夏季+2)。这怎么可能是58分钟?我希望是1小时,而不是58分钟。我在Linux上使用.NETCore var x1=DateTime.MinValue.AddMinutes(61); 变量x1ticks=x1.Ticks; 变量x1kind=x1.Kind; 变量y1=x1.ToUniversalTime

我正在测试一个代码,发现了一个非常奇怪的行为。当我使用
DateTime.MinValue
时,将分钟添加到其中,并将其转换为UTC,我的本地时区和UTC之间似乎相差58分钟。我在中欧(冬季+1,夏季+2)。这怎么可能是58分钟?我希望是1小时,而不是58分钟。我在Linux上使用.NETCore

var x1=DateTime.MinValue.AddMinutes(61);
变量x1ticks=x1.Ticks;
变量x1kind=x1.Kind;
变量y1=x1.ToUniversalTime();
变量y1ticks=y1.滴答声;
变量y1kind=y1.Kind;
var z1=时区信息转换TimeToutc(x1,时区信息本地);
var z1ticks=z1.Ticks;
var z1kind=z1.Kind;
带有计算值的代码段
58分钟大约是捷克共和国布拉格()与UTC的偏移量。我猜你们当地的时区是
欧洲/布拉格

TimeZoneInfo
从计算机上的时区数据库中查找时区数据。在Linux机器上(我认为是所有POSIX机器),默认的是IANA。在Windows计算机上,默认情况下,您将查询Windows时区数据库

无论如何,重要的是,根据IANA数据库,本地时区在
DateTime.MinValue
加上61分钟的UTC偏移量加上58分钟

// prints 00:58:00
Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById("Europe/Prague").GetUtcOffset(DateTime.MinValue));
另见

IANA数据库实际上说偏移量是57分44秒,但是.NETCore实际上把它作为一个实现细节,因为它不支持秒。我找到了以下解释它的源代码:

    private static TimeSpan TZif_CalculateTransitionOffsetFromBase(TimeSpan transitionOffset, TimeSpan timeZoneBaseUtcOffset)
    {
        TimeSpan result = transitionOffset - timeZoneBaseUtcOffset;

        // TZif supports seconds-level granularity with offsets but TimeZoneInfo only supports minutes since it aligns
        // with DateTimeOffset, SQL Server, and the W3C XML Specification
        if (result.Ticks % TimeSpan.TicksPerMinute != 0)
        {
            result = new TimeSpan(result.Hours, result.Minutes, 0);
        }

        return result;
    }

你是通过设置断点来运行的吗?如果有人需要+0:57:44,他们总是可以使用我的野田佳彦时间项目-我刚刚检查过,这报告正确:)