¿Fecha y hora valor "nulo"/no inicializado?

Resuelto Mats asked hace 16 años • 16 respuestas

¿Cómo se maneja un DateTime que debería poder contener un valor no inicializado (equivalente a nulo)?

Tengo una clase que podría tener un valor de propiedad DateTime establecido o no. Estaba pensando en inicializar el titular de la propiedad en DateTime.MinValue, que luego podría verificarse fácilmente.

He estado buscando mucho pero no pude encontrar una solución.
Supongo que esta es una pregunta bastante común, ¿cómo se hace eso?

Mats avatar Oct 21 '08 19:10 Mats
Aceptado

Para DateTimes normales, si no los inicializa en absoluto, coincidirán DateTime.MinValue, porque es un tipo de valor en lugar de un tipo de referencia.

También puedes usar un DateTime que acepte valores NULL, como este:

DateTime? MyNullableDate;

O la forma más larga:

Nullable<DateTime> MyNullableDate;

Y, finalmente, hay una forma integrada de hacer referencia al valor predeterminado de cualquier tipo. Esto regresa nullpara tipos de referencia, pero para nuestro ejemplo de DateTime devolverá lo mismo que DateTime.MinValue:

default(DateTime)

o, en versiones más recientes de C#,

default
Joel Coehoorn avatar Oct 21 '2008 12:10 Joel Coehoorn

Si está utilizando .NET 2.0 (o posterior), puede utilizar el tipo que acepta valores NULL:

DateTime? dt = null;

o

Nullable<DateTime> dt = null;

Entonces despúes:

dt = new DateTime();

Y puedes comprobar el valor con:

if (dt.HasValue)
{
  // Do something with dt.Value
}

O puedes usarlo como:

DateTime dt2 = dt ?? DateTime.MinValue;

Puede leer más aquí:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

Mark Ingram avatar Oct 21 '2008 12:10 Mark Ingram

El siguiente camino también funciona

myClass.PublishDate = toPublish ? DateTime.Now : (DateTime?)null;

Tenga en cuenta que la propiedad PublishDate debe ser DateTime.

Aleksei avatar Feb 06 '2017 06:02 Aleksei

¿Fecha y hora? MiFechaHora{get;set;}

MyDateTime = (dr["f1"] == DBNull.Value) ? (DateTime?)null : ((DateTime)dr["f1"]);
Iman avatar Apr 28 '2010 16:04 Iman