2011-10-09 10 views
22

¿Cómo comprobar si han transcurrido 20 minutos desde la fecha actual?Comparación de fechas - ¿Cómo verificar si han pasado 20 minutos?

Por ejemplo:

var start = DateTime.Now; 
var oldDate = "08/10/2011 23:50:31"; 

    if(start ??) { 
    //20 minutes were passed from start 
    } 

cuál es la mejor manera de hacer esto? Gracias :)

+0

Es posible que desee utilizar 'DateTime.UtcNow' en lugar de' DateTime.Now' para evitar problemas con los cambios de horario de verano cuando el reloj puede retroceder o avanzar. –

+2

@Hightechrider: Usar 'UtcNow' solo es útil si la marca de tiempo de comparación está en UTC. – Gabe

+1

@Gabe, obviamente sí, pero convertir la hora de inicio a UTC y compararla va a ser mejor que comparar con 'DateTime.Now' porque de lo contrario, puede obtener situaciones en las que parece haber transcurrido una hora cuando no lo ha hecho. –

Respuesta

52
  1. debería convertir su hora de inicio a una hora UTC, decir 'inicio'.
  2. Ahora puede comparar su hora de inicio a la hora UTC actual usando:

    start.AddMinutes(20) > DateTime.UtcNow

Este enfoque significa que obtendrá la respuesta correcta en torno a cambios de hora.

Al agregar tiempo a la hora de inicio en lugar de restar y comparar el tiempo total en un TimeSpan, tiene una sintaxis más legible Y puede manejar más casos de diferencia de fecha, p. 1 mes desde el inicio, 2 semanas desde el inicio, ...

+2

+1 para enseñar algo que es lógico pero no fue evidente para mí. Y también me gusta la pista sobre la sintaxis más legible. –

+0

parece la mejor manera, intentaré esto. –

+0

¿Esto cambia el objeto real? p.ej. si almacena esto en algún lugar de la memoria, ¿se incrementará permanentemente en 20 minutos? En ese caso, tendría más sentido eliminar 20 minutos de DateTime.UtcNow ya que es un constructor –

5

Parse oldDate en un objeto DateTime (DateTime.Parse).

Reste la fecha analizada de start. Esto devolverá un TimeSpan.

Inspeccionar TotalMinutes.

+2

+1 esta respuesta es mejor que la mía. Me olvidé de TotalMinutes ... esta respuesta evita un segundo TimeSpan innecesario. –

+2

Personalmente prefiero 'start.AddMinutes (20)> now' porque dice" han transcurrido más de 20 minutos desde el inicio ". Además, puede usarlo para probar los intervalos medidos en semanas, meses y años que no puede hacer fácilmente con un TimeSpan. –

4
var start = DateTime.Now; 
var oldDate = DateTime.Parse("08/10/2011 23:50:31"); 

    if(start.Subtract(oldDate) >= TimeSpan.FromMinutes(20)) 
    { 
    //20 minutes were passed from start 
    } 
0
var end = DateTime.Parse(oldDate); 
if (start.Hour == end.Hour && start.AddMinutes(20).Minute >= end.Minute) 
+0

Esto no funciona si se pasa la hora. para start = '23: 20' end =' 24: 20' es cierto. –

4
var start = DateTime.Now; 
var oldDate = DateTime.Parse("08/10/2011 23:50:31"); 

if ((start - oldDate).TotalMinutes >= 20) 
{ 
    //20 minutes were passed from start 
} 
+0

Esto no funciona si se pasa la hora. para start = '23: 20' end =' 24: 20' es cierto. –

+0

¿Por qué enviarías las 24:20 como hora? En tal caso, debe utilizar un objeto TimeSpan, no un DateTime, los objetos DateTime están destinados a ser utilizados para representaciones de tiempo válidas, no "24:20" –

1

que fue capaz de lograr esto mediante el uso de una biblioteca JodaTime en mi proyecto. Salí con este código.

String datetime1 = "2012/08/24 05:22:34"; 
String datetime2 = "2012/08/24 05:23:28"; 

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss"); 
DateTime time1 = format.parseDateTime(datetime1); 
DateTime time2 = format.parseDateTime(datetime2); 
Minutes Interval = Minutes.minutesBetween(time1, time2); 
Minutes minInterval = Minutes.minutes(20); 

if(Interval.isGreaterThan(minInterval)){ 
    return true; 
} 
else{ 
    return false; 
} 

Esto comprobará si el intervalo de tiempo entre datetime1 y datetime2 es greaterThan 20 minutos. Cambie la propiedad a Segundos. Será más fácil para ti saberlo. Esto devolverá falso.

Cuestiones relacionadas