Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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# TimeZone.isambiguustime,为什么它在GMT模糊时间失败?_C#_.net_Datetime - Fatal编程技术网

C# TimeZone.isambiguustime,为什么它在GMT模糊时间失败?

C# TimeZone.isambiguustime,为什么它在GMT模糊时间失败?,c#,.net,datetime,C#,.net,Datetime,我的服务器发送CEST时间,我需要在用户界面上显示从服务器接收到的CEST时间,DST开关除外。GMT中不明确的小时数应转换为GMT中不明确的小时数。也许下面的测试可以解释我的意图 [Test] public void Should_process_server_time() { var britishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); var germanZone = TimeZone

我的服务器发送CEST时间,我需要在用户界面上显示从服务器接收到的CEST时间,DST开关除外。GMT中不明确的小时数应转换为GMT中不明确的小时数。也许下面的测试可以解释我的意图

[Test]
public void Should_process_server_time()
{
    var britishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
    var germanZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
    var firstAmbigiousMarchEntry = new DateTime(2011, 03, 27, 01, 00, 00);
    var secondAmbigiousMarchEntry = new DateTime(2011, 03, 27, 01, 30, 00);

    //Why does this fail even though 2011-03-27 01:00:00 is an ambigous time in GMT?
    Assert.That(britishZone.IsAmbiguousTime(firstAmbigiousMarchEntry));
    Assert.That(britishZone.IsAmbiguousTime(secondAmbigiousMarchEntry));

    var unAmbigiousFirstMarchEntry = TimeZoneInfo.ConvertTime(firstAmbigiousMarchEntry, germanZone, britishZone);
    var unAmbigiousSecondMarchEntry = TimeZoneInfo.ConvertTime(secondAmbigiousMarchEntry, germanZone, britishZone);

    Assert.That(britishZone.IsAmbiguousTime(unAmbigiousFirstMarchEntry), Is.False);
    Assert.That(britishZone.IsAmbiguousTime(unAmbigiousSecondMarchEntry), Is.False);

    Assert.That(unAmbigiousFirstMarchEntry.Hour == 2);
    Assert.That(unAmbigiousFirstMarchEntry.Minute == 0);
    Assert.That(unAmbigiousFirstMarchEntry.Second == 0);

    Assert.That(unAmbigiousSecondMarchEntry.Hour == 2);
    Assert.That(unAmbigiousSecondMarchEntry.Minute == 30);
    Assert.That(unAmbigiousSecondMarchEntry.Second == 0);

}
请问你能帮忙吗?我的目的是将英国区域中的模糊时间转换为英国区域中的明确时间,即2011-03-27 01:00:00至2011-03-27 02:00:00。为此,我需要确定接收到的日期时间在GMT区域中是否模糊,但呼叫失败。 我的系统在英国地区设置下运行

我尝试了下面的测试,它通过了。现在我很困惑,
IsInvalidTime
IsAmbigoustime
在GMT区域有什么区别

[Test]
public void Should_process_server_time()
{
    var britishZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
    var germanZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time");
    var firstAmbigiousMarchEntry = new DateTime(2011, 03, 27, 01, 00, 00);
    var secondAmbigiousMarchEntry = new DateTime(2011, 03, 27, 01, 30, 00);

    Assert.That(britishZone.IsInvalidTime(firstAmbigiousMarchEntry));
    Assert.That(britishZone.IsInvalidTime(secondAmbigiousMarchEntry));

    var unAmbigiousFirstMarchEntry = TimeZoneInfo.ConvertTime(firstAmbigiousMarchEntry, germanZone, britishZone);
    var unAmbigiousSecondMarchEntry = TimeZoneInfo.ConvertTime(secondAmbigiousMarchEntry, germanZone, britishZone);

    unAmbigiousFirstMarchEntry = unAmbigiousFirstMarchEntry.AddHours(2);
    unAmbigiousSecondMarchEntry = unAmbigiousSecondMarchEntry.AddHours(2);

    Assert.That(britishZone.IsAmbiguousTime(unAmbigiousFirstMarchEntry), Is.False);
    Assert.That(britishZone.IsAmbiguousTime(unAmbigiousSecondMarchEntry), Is.False);

    Assert.That(unAmbigiousFirstMarchEntry.Hour == 2);
    Assert.That(unAmbigiousFirstMarchEntry.Minute == 0);
    Assert.That(unAmbigiousFirstMarchEntry.Second == 0);

    Assert.That(unAmbigiousSecondMarchEntry.Hour == 2);
    Assert.That(unAmbigiousSecondMarchEntry.Minute == 30);
    Assert.That(unAmbigiousSecondMarchEntry.Second == 0);
}

你也认为这可以更好地实施吗?

我认为答案是GMT从来都不是含糊不清的。GMT总是+0。伦敦的时区称为西欧时间,冬季为+0,夏季为+1。

准确地说。GMT总是GMT。它没有夏令时。例如:瑞典时间在冬季为GMT+1,夏季为GMT+2。WET与GMT同义,始终为UTC+0,与GMT相同。在夏季,大多数使用WET的国家切换到西部/BST,即UTC+1。如果是这样的话,为什么这个测试通过了(请看我的主要问题的编辑)?问题是在GMT时区上,无效时间和模糊时间有什么区别?