2011-08-16 11 views
27

Mam datetime w jednej zmiennej previous.Now chcę sprawdzić, czy poprzedni datetime jest przed dwudziestu minutach od aktualnej time.How mogę to zrobić?sprawdzenie, czy różnica pomiędzy 2 Data jest więcej niż 20 minut

Date previous = myobj.getPreviousDate(); 

Date now = new Date(); 

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

Jak możemy to zrobić?

+0

Co forma czasu te funkcje zwracają? Czas Unix? –

+0

Tak, zobacz tutaj: http://download.oracle.com/javase/6/docs/api/java/util/Date.html#getTime%28%29 – craesh

Odpowiedz

50

Zastosowanie

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

Albo, bardziej rozwlekły, ale być może nieco łatwiejsze do odczytania:

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 jeśli now.getTime -previous.getTime > 20 * 60 * 1000. Chcę sprawdzić, czy poprzedni czas był dłuższy niż 20 min w przeszłości od teraz – Akshay

+0

W porządku, jeśli "teraz minus poprzedni" jest dłuższy niż 20 minut, to poprzedni miał miejsce ponad 20 minut temu. – aioobe

+1

To nie działa, gdy 2 razy zachodzą na punkt przełączania oszczędności na czas letni. – Eric

2

Get razy w milisekundach i sprawdzić różnicę:

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

Another rozwiązaniem może być wykorzystanie czasu Joda.

+1

OP prosi o sprawdzenie, czy 'previuos' jest przed 20 minutami od' teraz', a nie różnica między nimi –

+0

@Eng: Czytaj szybko. Poprawiono :) –

+0

to znak porównawczy używany w opozycji. Chcę sprawdzić, czy poprzedni czas był dłuższy niż 20 min w przeszłości od czasu Crrenta – Akshay

5

Należy naprawdę użyć Kalendarz obiekt zamiast Data:

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

Powinny być 'long diff = now.getTimeInMillis() - previous.getTimeInMillis();' – Milton

+0

@Milton Oops, tak, oczywiście, dzięki. –

+0

To nie działa, gdy 2 razy zachodzą na punkt przełączania oszczędności w świetle dziennym. – Eric

16

Korzystanie Joda Time:

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

Java 8 rozwiązanie:

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

Działa również w Javie 6 i 7 z projektem ThreeTen-Backport oraz w Androidzie z projektem ThreeTenABP. –

Powiązane problemy