c# - year - ¿Cómo convertir sqldatetime.minvalue a datetime?
new datetime c# (3)
¿Alguna razón para no usar el operador de conversión explícito ?
DateTime dt = (DateTime) SqlDateTime.MinValue;
Funciona para mi:
using System;
using System.Data.SqlTypes;
class Test
{
static void Main()
{
DateTime dt = (DateTime) SqlDateTime.MinValue;
Console.WriteLine(dt);
}
}
Parece que no puedo convertir un sqldatatime.minvalue en un objeto de fecha y hora.
Lo intenté:
Datetime dt = Convert.ToDateTime(SqlDateTime.MinValue);
Eso obviamente no funcionó.
Las respuestas que ha recibido le han mostrado dos formas diferentes de convertir el valor. Una es usar una conversión explícita definida para SqlDateTime
a DateTime
, la otra es acceder a la propiedad .Value
en la instancia de SqlDateTime
, que devuelve una DateTime
.
var date = theSqlDate.Value; // via property
var date = (DateTime)theSqlDate; // via explicit conversion
Hay concesiones que vale la pena considerar. SqlDateTime
admite el concepto de valores nulos en la base de datos (DBNull, referenciado por otra respuesta ahora eliminada) a través del valor SqlDateTime.Null
. Si accede a la propiedad Value
en una instancia "nula", se encontrará con una SqlNullValueException
. Por otro lado, una conversión explícita a DateTime resulta en {January 1, 1900 12:00:00 AM}
. Ninguno de estos resultados puede ser deseado en su código. Sobrescribir una entrada nula válida en la base de datos con un valor predeterminado no nulo puede ser tan malo como obtener una excepción en tiempo de ejecución.
Si tiene una columna anulable en la base de datos, y si está trabajando con SqlDateTime
, es posible que deba probar y tratar a SqlDateTime.Null
explícita de SqlDateTime.Null
diferente, y entonces no importa qué enfoque adopte para convertir otros valores.
DateTime? date;
if (theSqlDate.Equals(SqlDateTime.Null))
date = null
else
date = theSqlDate.Value; // or (DateTime)theSqlDate;
No hay necesidad de convertir. SqlDateTime
tiene una propiedad de Value que devuelve un DateTime
.
DateTime dt = SqlDateTime.MinValue.Value;