jueves, 14 de julio de 2016

Manipulación de Fechas y Horas en C# - Parte 5/5: Casos en el Manejo de Horario de Verano

Índice

1. Introducción
2. Palabras Clave
3. DateTime y Horario de Verano
4. Método IsDayLightSavingTime
5. Algoritmos
6. Conclusiones
7. Literatura & Enlaces

1. Introducción

Esta última parte de la serie de artículos Manipulación de Fechas y Horas en C# culmina hablando de las intrincaciones o problemáticas que pueden generarse en el manejo de objetos de la estructura DateTime al efectuar comparaciones. Además, se enumeran algunas reglas o consideraciones para el uso adecuado de horarios de verano.

2. Palabras Clave

  • DateTime
  • Horario de verano

3. DateTime y Horario de Verano

Si se aplica la operación de comparación para objetos DateTimeOffset o DateTime bajo UTC, la operación resulta satisfactoria en condiciones de horario de verano. Mientras que si la comparación se realiza con objetos DateTime esto resulta en problemas.

Estas son algunas de las reglas a considerar para evitar un uso inadecuado sobre este tipo de objetos: 
  • El horario de verano sólo afecta horarios locales pero no UTC.
  • Cuando se producen retrasos horarios, las comparaciones de objetos DateTime resulta afectada.
  • La alternación entre UTC y configuraciones de hora locales no generan ningún problema siempre y cuando se realizan sobre el mismo sistema.

4. Método IsDaylightSavingTime

El método static IsDaylightSavingTime indica si una instancia de DateTime se halla en horario de verano. Este ejemplo comprueba su utilidad de la siguiente manera: 

Console.WriteLine(DateTime.Now.IsDaylightSavingTime());
Console.WriteLine(DateTime.UtcNow.IsDaylightSavingTime());

La primera sentencia podría resultar en true o false; mientras que la segunda siempre es false. Esto es así porque el horario de verano no afecta a horarios basados en UTC.

5. Algoritmos

En algoritmos que usan horarios locales la finalización de un horario de verano presenta algunas complicaciones (Albahari, 2012).

Con respecto a lo inmediatamente anterior, cuando el reloj se retrasa, una hora en particular se repite así misma. Con este ejemplo de código fuente C# queda más claro este caso: 

System.Globalization.DaylightTime cambiosHorarioVerano =
TimeZone.CurrentTimeZone.GetDaylightChanges(2010);

TimeSpan delta = new TimeSpan(cambiosHorarioVerano.Delta.Ticks / 2);
DateTime utc1 = cambiosHorarioVerano.End.ToUniversalTime() - delta;
DateTime utc2 = utc1 - cambiosHorarioVerano.Delta;

DateTime local1 = utc1.ToLocalTime();
DateTime local2 = utc2.ToLocalTime();
Console.WriteLine(local1);
Console.WriteLine(local2);
Console.WriteLine(local1 == local2);

Cuando estas sentencias se ejecutan su resultado consiste en 

2/11/2010 1:30:00 AM
2/11/2010 1:30:00 AM
True

[Nota: Este ejemplo se basa en el ID de zona de horaria W. Australia Standard Time.]

6. Conclusiones

Al escribir programas que manipulan fechas y horas el programador debe ser cuidadoso con la interpretación de las variaciones de horario, y también con la configuración local de su sistema de cómputo.

Los siguientes artículos C# describen cómo realizar formato y parseo de cadenas de textos.

7. Literatura & Enlaces

Albahari, J., Albahari, B. (2012). C# 5.0 in a Nutshell. United States: O'Reilly Media.
DateTime.IsDaylightSavingTime Method (System) (2016, julio 14). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.datetime.isdaylightsavingtime(v=vs.110).aspx


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.