La documentación de los estados .NET DateTime.ToLocalTime método:DateTime.ToLocalTime en Windows XP
En los sistemas Windows XP, el ToLocalTime método reconoce sólo la regla de ajuste de corriente al convertir de UTC a la hora local. Como resultado, las conversiones para períodos anteriores a la regla de ajuste actual entraron en , el efecto puede no reflejar con exactitud la diferencia entre la hora UTC y la hora local.
Estoy desarrollando en Windows 7 pero implementando en un entorno mixto. ¿Cómo puedo proporcionar una implementación coherente y correcta que coincida con el comportamiento de Windows 7 de ToLocalTime?
EDITAR
me hizo una prueba:
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);
}
Los resultados fueron idéntica bajo XP Pro 32 bits, SP3 (como VM) y Windows 7 Enterprise de 64 bits:
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
¿La documentación es incorrecta? ¿Puedo simplemente llamar a ToLocalTime?
EDIT 2
nos encontramos con esto en un sistema XP real (no una máquina virtual) y nos dieron resultados idénticos allí también. ¿Son correctos mis casos de prueba? ¿Alguien puede proporcionar un caso donde los resultados serán diferentes?
¡Aargh! Pensé que querían decir "debería aplicar el ajuste del horario de verano AHORA MISMO" cuando hablaron sobre las reglas de ajuste. Acabo de encontrar este [enlace] (http://www.techrepublic.com/article/what-net-developers-need-to-know-about-daylight-saving-time-changes/6160501) que dice que estás en lo correcto . ¡Gracias! – TrueWill