gpt4 book ai didi

c# - TimeZone.IsAmbigouslyTime,为什么它对于 GMT 模糊时间失败?

转载 作者:行者123 更新时间:2023-12-02 01:20:41 26 4
gpt4 key购买 nike

我的服务器发送 CEST 时间,我需要在 UI 上显示从服务器接收到的时间(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。为此,我需要确定 DateTime 是否在 GMT 区域收到的信息不明确,但调用失败。我的系统正在使用英国区域设置运行。

我尝试了下面的测试,它通过了。现在我很困惑 IsInvalidTimeIsAmbigoustime 在 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。

关于c# - TimeZone.IsAmbigouslyTime,为什么它对于 GMT 模糊时间失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com