lunes, 18 de julio de 2016

Cadenas de Caracteres de Formato Estándar y Flags de Parseo en C# - Parte 3/5: Cadenas de Caracteres para Formato de Fechas

Índice

1. Introducción
2. Palabras Clave
3. Cadenas de Caracteres para Formato de Fechas
3.1 Cadenas de caracteres para formato de fechas dependientes de la configuración regional y cultural
3.2 Cadenas de caracteres para formato de fechas independientes de la configuración regional y cultural
4. Ambigüedad Conversión Fechas
5. Conclusiones
6. Literatura & Enlaces

1. Introducción

En esta oportunidad se describe varios de los formatos disponibles para valores de fecha. Se muestra que las cadenas de caracteres de formato disponibles en .NET Framework están divididas en dos grupos: dependientes e independientes de la configuración regional y cultural y de proveedores de formato. Al final se señala algunos inconvenientes con la conversión de fechas por el orden que ocupan el mes y el día en la cadena de caracteres.

2. Palabras Clave

  • .NET Framework
  • Cadena de caracteres de formato
  • Fecha
  • Formato
  • Proveedor de formato

3. Cadenas de Caracteres para Formato de Fechas

En .NET Framework las cadenas de caracteres de formato para objetos de las estructuras DateTime y DateTimeOffset están divididas en dos grupos: 
  1. Un grupo que considera las configuraciones regionales y de cultura, y de proveedores de formato
  2. Y otro grupo que omite esté tipo de configuración

3.1 Cadenas de caracteres para formato de fechas dependientes de la configuración regional y cultural

La Tabla 1 (Albahari, 2012) enumera varios ejemplos de cadenas de caracteres para formato de fechas que consideran la configuración regional y cultural y de proveedores de formato.

Los ejemplos están basados en la información del objeto DateTime declarado 

new DateTime(2013, 3, 22, 19, 13, 31);
Cadenas de formato dependiente de la configuración cultural
Tabla 1. Cadenas de formato dependiente de la configuración cultural (Albahari, 2012).
Los ejemplos en código C# se describe en el siguiente archivo.

> Prueba de ejecución: http://ideone.com/FH9jEf

3.2 Cadenas de caracteres para formato de fechas independientes de la configuración regional y cultural

En la Tabla 2 (Albahari, 2012) se enumeran cada una de las cadenas de caracteres de formato para fecha independientes de la configuración regional y cultural del sistema.
Cadenas de caracteres para formato de fechas independientes de la configuración regional y cultural
Tabla 2. Cadenas de caracteres para formato de fechas independientes de la configuración regional y cultural.
Notas importantes acerca de estas cadenas de formato (Albahari, 2012)
  • r, R y u generan un sufijo que implica el estándar UTC pero no convierten la hora local a un objeto DateTime basado en UTC
  • U convierte al estándar UTC pero no agrega el sufijo de zona horaria
Código fuente C# que demuestra las capacidades de estas cadenas de formato: 

> Prueba de ejecución (online): http://ideone.com/WwZsa8

4. Ambigüedad Conversión Fechas

A la hora de convertir fechas, el programador se enfrenta a una ambigüedad respecto a los valores de mes y día en la representación de la fecha. Esto se debe a las variaciones en la configuración regional y cultural de los sistemas o fuentes de datos comprometidos.

Este problema de conversión de fechas se hace explícito cuando se manipulan archivos, especialmente en los procesos de lectura y escritura. De acuerdo con Albahari (2012), existen dos soluciones viables. La primera consiste en 
  • Realizar las operaciones de lectura y escritura con la configuración explícita cultural y regional
  • Formatear objetos DateTime y DatTimeOffset usando un mecanismo independiente de la cultura adyacente al sistema
Mientras que la segunda resulta aún más robusta. Estos son, en esencia, los pasos para convertir sin ambigüedades: 

1. Crear un objeto DateTime independiente de la cultura: 

string s = DateTime.Now.ToString ("o");

2. Usar el método static ParseExact ("DateTime.ParseExact Method", 2016) como mecanismo estricto de conversión: 

DateTime dt = DateTime.ParseExact (s, "o", null);

5. Conclusiones

Se instruyó al programador de C# en el manejo de cadenas de caracteres de formato para valores de fecha. En las referencias tabuladas se ilustra éstas cadenas que están o no influenciadas por la configuración regional y cultural del sistema. Al final se describió, en breve, el mecanismo para evitar ambigüedades en el manejo de fechas para archivos de texto.

La cuarta parte de esta serie de artículos describe la enumeración DateTimeStyles.

6. Literatura & Enlaces

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


O

No hay comentarios:

Publicar un comentario

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