2
我處於服務器發送CEST時間的情況,除了DST開關之外,我需要將它顯示在UI上,因爲它是從服務器接收的。GMT中的模糊小時應轉換爲明確的格林尼治標準時間。可能在下面測試可以解釋我的意圖。TimeZone.IsAmbiguousTime,爲什麼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區域時,IsInvalidTime
和IsAmbigoustime
之間的區別是什麼?
[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 + 1,夏季GMT + 2。 – jgauffin 2011-02-10 09:45:27