tengo un método que obtiene una propiedad de fecha de una fuente (ya sea un DataRow
o una SqlDataReader
):La conversión de DateTime a SqlDateTime es inexacta
protected SqlDateTime GetSqlDateTimePropertyValue(string propertyName, object source)
{
var objValue = GetPropertyValue(propertyName, source);
var value = objValue == DBNull.Value ? null : (DateTime?)objValue;
var sqlValue = new SqlDateTime();
if (value.HasValue) sqlValue = value.Value;
return sqlValue;
}
pero la conversión parece estar cambiando ligeramente la fecha para que mi prueba siempre falla.
¿Alguien sabe por qué este método se convertiría incorrectamente?
Al final del procedimiento, parece que la conversión a SqlDateTime
hace algo de redondeo:
value.Value.Ticks: 634698391707468296
sqlValue.Value.Ticks: 634698391707470000
Ver: http://stackoverflow.com/questions/7824766/how-does-sqldatetime-do-its-precision-reduction –