내 서버가 CEST 시간을 보내고 DST 스위치를 제외하고 서버에서 수신 한대로 UI에 표시해야하는 상황에 있습니다. GMT의 모호한 시간은 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 영역에서 모호하지만, 호출이 실패합니다. 내 시스템이 영국 국가 별 설정으로 실행 중입니다.
나는 아래 테스트를 시도하고 통과한다. 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입니다. 그것은 일광 절약 시간이 없다. 예 : 스웨덴 시간은 겨울에는 GMT + 1이고 여름에는 GMT + 2입니다. – jgauffin
그렇다면 왜이 테스트가 통과합니까? (내 주요 질문에 대한 편집을 참조하십시오)? 질문은 GMT 시간대와 관련하여 InvalidTime과 AmbigousTime의 차이점은 무엇입니까? – Mike