He estado buscando mucho pero no pude encontrar una solución. ¿Cómo manejas 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 a DateTime.MinValue, que luego podría verificarse fácilmente. Supongo que esta es una pregunta bastante común, ¿cómo haces eso?
273
DateTime.MinValue
, asíMyNullableDate=date;
que configurarlo,MyDate = MyNullableDate.Value;
leerlo yif(MyNullableDate.HasValue)
verificar si es nuloSi está utilizando .NET 2.0 (o posterior) puede usar el tipo anulable:
o
Entonces despúes:
Y puede verificar el valor con:
O puedes usarlo como:
Puede leer más aquí:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
fuente
dt.GetValueOrDefault()
, es la opción más eficiente.¿Fecha y hora? MyDateTime {get; set;}
fuente
null
no funciona. Tiene que ser(DateTime?)null
.Seguir el camino también funciona
Tenga en cuenta que la propiedad PublishDate debe ser DateTime?
fuente
Consideraría usar un tipo anulable .
DateTime? myDate
en lugar deDateTime myDate
.fuente
Vale la pena señalar que, si bien una
DateTime
variable no puede sernull
, todavía se puede compararnull
sin un error del compilador:fuente
Puede usar una clase anulable.
fuente
DateTime
. Como se mencionó anteriormente,new DateTime()
efectivamente le dará,DateTime.Min
mientras quenew DateTime?()
dará como resultado nulo.Puede usar un DateTime anulable para esto.
o lo mismo escrito así:
fuente
Puede establecer DateTime en Nullable. Por defecto, DateTime no es anulable. Puede hacerlo anulable de varias maneras. ¿Usa un signo de interrogación después del tipo DateTime? myTime o usando el estilo genérico Nullable.
o
fuente
Siempre pongo el tiempo para
DateTime.MinValue
. De esta forma no obtengo ninguna NullErrorException y puedo compararla con una fecha que sé que no está establecida.fuente
Solo se advirtió: cuando se utiliza un Nullable, obviamente ya no es un objeto de fecha y hora "puro", como tal, no puede acceder directamente a los miembros de DateTime. Trataré de explicarlo.
Al usar Nullable <> básicamente está envolviendo DateTime en un contenedor (gracias genéricos) de los cuales es anulable, obviamente su propósito. Este contenedor tiene sus propias propiedades a las que puede llamar que proporcionarán acceso al objeto DateTime mencionado anteriormente; después de usar la propiedad correcta, en este caso Nullable.Value, tiene acceso a los miembros estándar de DateTime, propiedades, etc.
Entonces, ahora me viene a la mente la mejor forma de acceder al objeto DateTime. Hay algunas maneras, el número 1 es, con diferencia, el mejor y el 2 es "amigo por qué".
Usando la propiedad Nullable.Value,
DateTime date = myNullableObject.Value.ToUniversalTime(); //Works
DateTime date = myNullableObject.ToUniversalTime(); //Not a datetime object, fails
Convirtiendo el objeto anulable a datetime usando Convert.ToDateTime (),
DateTime date = Convert.ToDateTime(myNullableObject).ToUniversalTime(); //works but why...
Aunque la respuesta está bien documentada en este punto, creo que probablemente valga la pena publicar el uso de Nullable. Lo siento si no estás de acuerdo.
editar: se eliminó una tercera opción, ya que era un poco demasiado específica y dependía de mayúsculas y minúsculas.
fuente
Aunque todos ya le han dado la respuesta, mencionaré una forma que facilita pasar una fecha y hora a una función
[ERROR: no se puede convertir system.datetime? a system.datetime]
Ahora puede pasar dte dentro de la función sin ningún problema.
fuente
Si, a veces, espera nulo, podría usar algo como esto:
En su repositorio use datetime nulo.
fuente
Tuve el mismo problema que tuve que darle a Null como parámetro para DateTime mientras realizaba la prueba de unidad para Throws ArgumentNullException. Funcionó en mi caso usando la siguiente opción:
fuente
Dada la naturaleza de un tipo de datos de fecha / hora, no puede contener un
null
valor, es decir, debe contener un valor, no puede estar en blanco o no contener nada. Si marca una variable de fecha / hora comonullable
solo entonces puede asignarle un valor nulo. Entonces, lo que está buscando hacer es una de dos cosas (puede haber más, pero solo puedo pensar en dos):Asigne un valor mínimo de fecha / hora a su variable si no tiene un valor para ella. También puede asignar un valor máximo de fecha / hora, de la forma que más le convenga. Solo asegúrese de ser consistente en todo el sitio cuando verifique sus valores de fecha / hora. Decide usar
min
omax
y quédate con él.Marque su variable de fecha / hora como
nullable
. De esta manera, puede establecer su variable de fecha / horanull
si no tiene una variable.Permítanme demostrar mi primer punto usando un ejemplo. El
DateTime
tipo de variable no se puede establecer en nulo, necesita un valor, en este caso voy a establecerlo en elDateTime
valor mínimo si no hay ningún valor.Mi escenario es que tengo una
BlogPost
clase. Tiene muchos campos / propiedades diferentes, pero elegí solo usar dos para este ejemplo.DatePublished
es cuando la publicación se publicó en el sitio web y debe contener un valor de fecha / hora.DateModified
es cuando se modifica una publicación, por lo que no tiene que contener un valor, pero puede contener un valor.Utilizando
ADO.NET
para obtener los datos de la base de datos (asignarDateTime.MinValue
es que no hay valor):Puedes lograr mi segundo punto marcando el
DateModified
campo comonullable
. Ahora puede configurarlonull
si no tiene ningún valor:Utilizando
ADO.NET
para obtener los datos de la base de datos, se verá un poco diferente a la forma en que se hizo anteriormente (asignando ennull
lugar deDateTime.MinValue
):Espero que esto ayude a aclarar cualquier confusión. Dado que mi respuesta es aproximadamente 8 años después, probablemente ya seas un programador experto de C # :)
fuente