2011-03-19 22 views
11

Tengo un objeto DateTime que me gustaría verificar y ver si se cae dentro de las últimas 24 horas.C# DateTime cae dentro de las últimas 24 horas

he hecho algo como esto, pero su mal:

myDateTime > DateTime.Now.AddHours(-24) && myDateTime < DateTime.Now 

donde hice mal?

+1

Definir "que está mal" ... a primera vista se ve bien ... trató AddDays (-1)? –

Respuesta

23

No hay nada de malo con el código que ha publicado, por lo que lo que hizo mal es en otro lugar en el código.

sólo veo dos defectos menores en el código, pero sólo afectan a casos de esquina:

Se debe evitar que la propiedad DateTime.Now en repetidas ocasiones en el código. Su valor cambia, por lo que puede obtener resultados inconsistentes en algunos casos cuando los valores cambian de un uso a otro.

Para obtener un intervalo de tiempo que se suele asociar uno inclusivo y un operador exclusivo, como > y <= o >= y <. De esta forma, puede verificar los intervalos uno al lado del otro, como 0 - 24 horas y 24 - 28 horas, sin obtener un espacio o una superposición.

DateTime now = DateTime.Now; 
if (myDateTime > now.AddHours(-24) && myDateTime <= now) 
+0

No entiendo la técnica de optimización de la que está hablando, ¿podría explicar con algún código, por favor? –

+1

@Gully Monsta: Agregué un ejemplo anterior. Sin embargo, esto no es una optimización, solo evita posibles inconsistencias en el código. – Guffa

+0

Otra cosa menor es que debería usar 'UTCNow'. Creo que 'Now' muestra un comportamiento un tanto extraño al cambiar de/a DST. No estoy seguro si esto afecta este código. – CodesInChaos

10
  1. Sólo obtener DateTime.Now una vez dentro de la función - de lo contrario el valor puede cambiar.
  2. Utilice <=, no <. si revisa un microsegundo después de haber configurado el tiempo, igual será igual a DateTime.Now. De hecho, me encontré con esto en el código de producción donde las importaciones no se mostrarían en una consulta diferente que marcó < porque la importación fue demasiado rápida.

Usar este código:

DateTime now = DateTime.Now; 
DateTime yesterday = now.AddDays(-1); 
if (myDateTime > yesterday && myDateTime <= now) { 
    ... 
} 
+0

Lo siento, no puedo votar porque estoy muy bajo. –

Cuestiones relacionadas