2011-08-16 82 views
27

我有一個日期時間在一個變量previous.Now我想檢查是否以前的日期時間是從目前的時間20分鐘之前。我該怎麼辦呢?檢查兩個日期之間的差異是否超過20分鐘

Date previous = myobj.getPreviousDate(); 

Date now = new Date(); 

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

我們該怎麼做?

+0

什麼形式的時間做這些函數返回? Unix時間? –

+0

是的,請看這裏:http://download.oracle.com/javase/6/docs/api/java/util/Date.html#getTime%28%29 – craesh

回答

50

使用

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

或者,更詳細的,但也許稍微容易閱讀:

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:if now.getTime -previous.getTime > 20 * 60 * 1000.我想檢查以前的時間是否超過20分鐘過去從現在開始 – Akshay

+0

對,如果「現在減去前一個」大於20分鐘,那麼之前發生的時間超過20分鐘。 – aioobe

+1

當2次與夏令時切換點重疊時,這不起作用。 – Eric

2

獲取時間以毫秒爲單位,並檢查區別:

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

另一個解決方案可能是使用喬達時間。

+1

OP要求檢查'previuos'是否在'now'後20分鐘之前,而不是它們之間的差異 –

+0

@Eng:快速閱讀。更正:) –

+0

是相反方式使用的比較符號。我想檢查以前的時間是否超過20分鐘,從過去的時間 – Akshay

5

你真的應該使用日曆對象,而不是日期:

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

應該是'long diff = now.getTimeInMillis() - previous.getTimeInMillis();' – Milton

+0

@Milton Oops,當然,謝謝。 –

+0

當2次重疊夏令時切換點時,這不起作用。 – Eric

16

使用Joda Time

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

的Java 8解決方案:

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

在ThreeTen-Backport項目中也可以在Java 6和7中工作,在Android中使用ThreeTenABP項目。 –