Я подозреваю, что это путешествие туда и обратно не получается из-за неоднозначности результирующего среднего времени. Есть ли что-нибудь, что можно с этим сделать? Не соответствует результату:
http://www.timeanddate.com/worldclock/converted.html?month=11&day=6&year=2011&hour=1&min=59&sec=0&p1=179&p2=75
Это просто совпадение, что .NET выбрал одно, возможно, неоднозначное время, а веб-сайт выбрал другое, и это было то, что я ожидал вернуть?
Я понимаю, что решение заключается в том, чтобы хранить время в UTC, но я имею дело с устаревшим приложением.
public const string EASTERN_TIMEZONEID = "Eastern Standard Time";
public const string MOUNTAIN_TIMEZONEID = "Mountain Standard Time";
[TestMethod]
public void MountainToEasternToMountain_DaylightSavings_Test()
{
DateTime originalTime = new DateTime(2011, 11, 5, 23, 59, 0); // November 5, 2011 - 11:59pm
DateTime expectedMiddle = new DateTime(2011, 11, 6, 1, 59, 0); // November 6, 2011 - 1:59am
DateTime expectedEnd = originalTime; // November 5, 2011 - 11:59pm
TimeZoneInfo easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById(EASTERN_TIMEZONEID);
TimeZoneInfo mountainTimeZone = TimeZoneInfo.FindSystemTimeZoneById(MOUNTAIN_TIMEZONEID);
var middleTime = TimeZoneInfo.ConvertTime(originalTime, mountainTimeZone, easternTimeZone);
var isSourceAmbiguous = mountainTimeZone.IsAmbiguousTime(originalTime);
var isMiddleAmbiguous = easternTimeZone.IsAmbiguousTime(middleTime);
Assert.AreEqual(expectedMiddle, middleTime);
var destTime = TimeZoneInfo.ConvertTime(middleTime, easternTimeZone, mountainTimeZone);
var isMiddleSourceAmbiguous = easternTimeZone.IsAmbiguousTime(middleTime);
var isDestAmbiguous = mountainTimeZone.IsAmbiguousTime(destTime);
Assert.AreEqual(expectedEnd, destTime);
}