DateTime.ToLocalTime в Windows XP

В документации к методу .NET DateTime.ToLocalTime говорится:

В системах Windows XP ToLocalTime метод распознает только текущие правило настройки при конвертации из UTC по местному времени. Как результат, конверсии за периоды до действующее правило корректировки вступило в эффект может не точно отражать разница между UTC и местным временем.

Я разрабатываю на Windows 7, но развертываю в смешанной среде. Как я могу обеспечить последовательную и правильную реализацию, которая соответствует поведению ToLocalTime в Windows 7?

РЕДАКТИРОВАТЬ

Я провел тест:

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);
}

Результаты были идентичными в 32-разрядной версии XP Pro, SP3 (как ВМ) и 64-разрядная версия Windows 7 Enterprise:

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?

РЕДАКТИРОВАТЬ 2

Мы запустили это на реальной системе XP (не на виртуальной машине) и получили там идентичные результаты. Верны ли мои тестовые примеры? Может ли кто-нибудь представить случай, когда результаты будут отличаться?

5
задан TrueWill 14 February 2011 в 22:55
поделиться