Документация для метода состояний .NET DateTime.ToLocalTime:DateTime.ToLocalTime на Windows XP
В системах Windows XP, то ToLocalTime метод распознает только текущий регулировка правила при переходе от UTC к местному времени. В результате конверсии за периоды, предшествующие правилу корректировки тока , пришли к . Эффект может неточно отражать разницу между временем по Гринвичу и местным временем.
Я развиваюсь в Windows 7, но развертываясь в смешанной среде. Как я могу обеспечить последовательную, правильную реализацию, которая соответствует поведению Windows 7 в ToLocalTime?
EDIT
Я побежал тест:
static void Main()
{
// 8 AM in July, UTC. That would have been DST, so 3 AM CDT.
var dstDate = new DateTime(2010, 7, 1, 8, 0, 0, DateTimeKind.Utc);
// 8 AM in December, UTC. Not DST, so 2 AM CST.
var nonDstDate = new DateTime(2010, 12, 1, 8, 0, 0, DateTimeKind.Utc);
Log("DST Date ToLocalTime: " + dstDate.ToLocalTime());
Log("DST Date ConvertTimeFromUtc: " + ConvertTimeFromUtc(dstDate));
Log("Expected: 3 AM July 1 2010");
Log(string.Empty);
Log("Non-DST Date ToLocalTime: " + nonDstDate.ToLocalTime());
Log("Non-DST Date ConvertTimeFromUtc: " + ConvertTimeFromUtc(nonDstDate));
Log("Expected: 2 AM December 1 2010");
Log(string.Empty);
Log("Date ToLocalTime Kind: " + dstDate.ToLocalTime().Kind);
Log("Date ConvertTimeFromUtc Kind: " + ConvertTimeFromUtc(dstDate).Kind);
}
private static void Log(string message)
{
Console.WriteLine(message);
}
private static DateTime ConvertTimeFromUtc(DateTime utcDateTime)
{
return
DateTime.SpecifyKind(
TimeZoneInfo.ConvertTimeFromUtc(
utcDateTime,
TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)),
DateTimeKind.Local);
}
Результаты были идентичны под XP Pro 32-битным, SP3 (как VM) и ОС Windows 7 Enterprise 64-разрядное:
DST Date ToLocalTime: 7/1/2010 3:00:00 AM DST Date ConvertTimeFromUtc: 7/1/2010 3:00:00 AM Expected: 3 AM July 1 2010 Non-DST Date ToLocalTime: 12/1/2010 2:00:00 AM Non-DST Date ConvertTimeFromUtc: 12/1/2010 2:00:00 AM Expected: 2 AM December 1 2010 Date ToLocalTime Kind: Local Date ConvertTimeFromUtc Kind: Local
Неправильная ли документация? Можно ли просто вызвать ToLocalTime?
EDIT 2
Мы провели это на фактической XP системы (не VM) и получили одинаковые результаты там. Правильны ли мои тестовые примеры? Может ли кто-нибудь указать случай, когда результаты будут отличаться?
Aargh! Я думал, они имели в виду «должен ли я применять корректировку DST RIGHT NOW», когда они говорили о правилах настройки. Я просто нашел это [ссылка] (http://www.techrepublic.com/article/what-net-developers-need-to-know-about-daylight-saving-time-changes/6160501), в котором говорится, что вы правы , Благодаря! – TrueWill