Skip to content

Zona Horaria al Serializar DateTime en WebService

by en 27 mayo, 2016

duratimezone_600px_animation[1]

Puede que alguna vez les haya pasado que al serializar un DateTime por un servicio web (o WCF), este haya llegado al otro extremo representando una hora distinta. ¿Cómo puede ser esto si la estrucutra DateTime de C# es totalmente agnóstica de la zona horaria?

Bueno, esto ocurre cuando el serializador no es agnóstico de la zona horaria y es exactamente lo que pasa cuando se transfieren DataSets (y por tanto DataTables) por un servicio, el serializador del DataSet se encarga de levantar la información de zona horaria del servidor y serializar las fechas teniendo en cuenta esto.

Para evitar que el DataSet serialice la información de la Zona Horaria, se debe hacer una rápida configuración a las columnas de tipo DateTime y fijar la propiedad “DateTimeMode” en “DataSetDateTime.Unspecified”.

A continuación les dejo un par de métodos de extensión que les aliviarán el trabajo, sólo deberán llamar al método “ConfigurarZonaHoraria” desde cualquier DataTable o DataSet para autimáticamente configurar todas las columnas de tipo DateTime. Asegúrense de realizar esta llamada cada vez que van a retornar un DataSet por un servicio.


///
<summary>
/// Configura las columnas de tipo DateTime para que sean agnósticas de la zona horaria al momento de la serialización.
/// </summary>

/// <param name="dt"></param>
/// <returns></returns>
public static DataTable ConfigurarZonaHoraria(this DataTable dt)
{
    foreach (DataColumn dc in dt.Columns)
    {
        if (dc.DataType == typeof(DateTime))
        dc.DateTimeMode = DataSetDateTime.Unspecified;
    }

    return dt;
}

///
<summary>
/// Configura las columnas de tipo DateTime para que sean agnósticas de la zona horaria al momento de la serialización.
/// </summary>

/// <param name="ds"></param>
/// <returns></returns>
public static DataSet ConfigurarZonaHoraria(this DataSet ds)
{
    foreach (DataTable dt in ds.Tables)
        dt.ConfigurarZonaHoraria();

    return ds;
}

 

From → .NET Framework, C#, WCF

Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: