C# TimeZone.isambiguustime,为什么它在GMT模糊时间失败?
我的服务器发送CEST时间,我需要在用户界面上显示从服务器接收到的CEST时间,DST开关除外。GMT中不明确的小时数应转换为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
[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时区上,无效时间和模糊时间有什么区别?