2011-08-16 13 views
27

私は1つの変数previous.Nowでdatetimeを持っていますが、前回のdatetimeが現在のtime.Howから20分前であるかどうかを確認したいのですか?2つの日付間の差が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:isnt 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) { 
    // ... 
} 

別ソリューションはJoda時間を使用することができます。

あなたは本当に代わりに、日付のCalendarオブジェクトを使用する必要があります
+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

'長いdiff = now.getTimeInMillis() - previous.getTimeInMillis();' – Milton

+0

@Miltonおっと、はい、もちろん、ありがとうございます。 –

+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プロジェクト、ThreeTenABPプロジェクトのAndroidでJava 6および7でも動作します。 –

関連する問題