Hola Amigos,

Hoy me he encontrado con un problema, el escenario es el siguiente:

CRM 2011, SQL SERVER 2008, Aplicación ASP.NET que realiza consultas a la Base de datos del CRM.

Pues bien, resulta que se cargaron datos del cliente antiguos a su nuevo sistema CRM, en estos datos teníamos actividades, de las cuales solo se guarda la fecha, por lo que en el hipotético caso que hiciéramos una visita ayer se pasaría  a MSCRM 2011 la fecha 28/05/2012. Hasta aqui todo normal, se carga correctamente en el CRM y si la buscamos, se muestra correctamente.

Ahora viene lo bueno, al tener una aplicación .NET que consulta directa mente en la base de datos sin utilizar los servicios para mostrar reports, está obtiene los datos guardados en la BBDD, y aquí está la chicha, MSCRM 2011 guarda la fecha UTC así que en lugar de guardar y aparecer 28/05/2012 00:00:00 en base de datos se guarda 27/05/2012 22:00:00.

¿Porque? pues esto está pensado para que realmente cuando tu conectes desde cualquier franja horaria del mundo te diga a que hora local tuya se realizo la operación, en este caso la actividad.

Al tener en España ahora mismo GTM + 2 el le resta a la fecha 2 horas, que al venir sin hora informada el interpreta que son las 12 de la noche exactamente.

Volviendo a la aplicación de reports en asp .net, al buscar entre dos fechas en este caso entre el 28/05/2012 y el 29/05/2012 no encontraba nada porque claro buscaba con la fecha de BBDD y no existía nada,  he solucionado este problema de una forma elegante y que funcionaría en cualquier horario, ya sea invierno y verano, haciendo lo siguiente en SQL, si lo haces directa mente en la consulta:

DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), GETDATE()), FECHA_A_RECUPERAR)

Para C# lo explicaremos en el siguiente post.

Dejar respuesta

Please enter your comment!
Please enter your name here

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.