2011-08-16 9 views
27

Tengo una fecha y hora en una variable anterior. Ahora quiero verificar si la fecha y hora anterior es anterior a veinte minutos de la hora actual. ¿Cómo puedo hacerlo?comprobando si la diferencia entre la fecha 2 es más de 20 minutos

Date previous = myobj.getPreviousDate(); 

Date now = new Date(); 

//check if previous was before 20 minutes from now ie now-previous >=20 

¿Cómo lo podemos hacer?

+0

¿Qué forma de tiempo lo devuelva estas funciones? Tiempo de Unix? –

+0

Sí, consulte aquí: http://download.oracle.com/javase/6/docs/api/java/util/Date.html#getTime%28%29 – craesh

Respuesta

50

Uso

if (now.getTime() - previous.getTime() >= 20*60*1000) { 
    ... 
} 

O, más detallado, pero quizás un poco más fácil de leer:

import static java.util.concurrent.TimeUnit.*; 

... 

long MAX_DURATION = MILLISECONDS.convert(20, MINUTES); 

long duration = now.getTime() - previous.getTime(); 

if (duration >= MAX_DURATION) { 
    ... 
} 
+0

@all: isnt if now.getTime -previous.getTime > 20 * 60 * 1000. Deseo verificar si el tiempo anterior fue más de 20 minutos en el pasado a partir de ahora – Akshay

+0

Correcto, si "ahora menos anterior" es mayor a 20 minutos, entonces el anterior tuvo lugar hace más de 20 minutos. – aioobe

+1

Esto no funciona cuando las 2 veces se superponen al punto del interruptor de ahorro de luz diurna. – Eric

2

Obtener los tiempos en milisegundos, y comprobar la diferencia:

long diff = now.getTime() - previous.getTime(); 
if (diff > 20L * 60 * 1000) { 
    // ... 
} 

Otro solución podría ser utilizar el tiempo Joda.

+1

El OP pregunta si 'previuos' es antes de los 20 minutos de' ahora', no la diferencia entre ellos –

+0

@Eng: Lea para rápido. Corregido :) –

+0

es el signo comparrison utilizado de manera opuesta. Quiero comprobar si el tiempo anterior fue más de 20 minutos en el pasado desde el momento de crrent – Akshay

5

realmente debería usar Calendario objeto en lugar de Fecha:

Calendar previous = Calendar.getInstance(); 
previous.setTime(myobj.getPreviousDate()); 
Calendar now = Calendar.getInstance(); 
long diff = now.getTimeInMillis() - previous.getTimeInMillis(); 
if(diff >= 20 * 60 * 1000) 
{ 
    //at least 20 minutes difference 
} 
+0

Debe ser 'long diff = now.getTimeInMillis() - previous.getTimeInMillis();' – Milton

+0

@Milton Vaya, sí, por supuesto, gracias. –

+0

Esto no funciona cuando las 2 veces se superponen con el punto de cambio de horario de verano. – Eric

16

Usando Joda Time:

boolean result = Minutes.minutesBetween(new DateTime(previous), new DateTime()) 
         .isGreaterThan(Minutes.minutes(20)); 
3

Java 8 solución:

private static boolean isAtleastTwentyMinutesAgo(Date date) { 
    Instant instant = Instant.ofEpochMilli(date.getTime()); 
    Instant twentyMinutesAgo = Instant.now().minus(Duration.ofMinutes(20)); 

    try { 
     return instant.isBefore(twentyMinutesAgo); 
    } catch (IOException e) { 
     throw new IllegalStateException(e); 
    } 
} 
+0

Funciona también en Java 6 y 7 con el proyecto ThreeTen-Backport y en Android con el proyecto ThreeTenABP. –

Cuestiones relacionadas