65

ここですべての投稿を見ましたが、2 つの Android 日付の違いを取得する方法がわかりません。

これが私がすることです:

long diff = date1.getTime() - date2.getTime();
Date diffDate = new Date(diff);

日付は 1970 年 1 月 1 日で、時間は常に 2 時間で大きくなります... 私はイスラエル出身なので、2 時間は timeOffset です。

どうすれば正常な差を得ることができますか???

4

14 に答える 14

143

正しい答えに近づいています。これら 2 つの日付の差をミリ秒単位で取得していますが、その差から日付を作成しようとすると、Dateその差の値を使用して新しいオブジェクトを作成する必要があると想定されます。エポックタイム。時間を時間単位で探している場合は、基本的な算術演算を実行してdiff、さまざまな時間部分を取得する必要があります。

ジャワ:

long diff = date1.getTime() - date2.getTime();
long seconds = diff / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = hours / 24;

コトリン:

val diff: Long = date1.getTime() - date2.getTime()
val seconds = diff / 1000
val minutes = seconds / 60
val hours = minutes / 60
val days = hours / 24

この計算はすべて単純に整数演算を行うため、小数点以下は切り捨てられます

于 2012-05-21T18:24:16.067 に答える
4

Instantの使用についてはどうですか:

val instant1 = now()
val instant2 = now()
val diff: Duration = Duration.between(instant1, instant2)
val minutes = diff.toMinutes()

Instant1.toString() を使用して Instant を保存し、その文字列を parse(string) で解析することもできます。

Android API レベル < 26 をサポートする必要がある場合は 、プロジェクトにJava 8+ API desugar サポート を追加するだけです。

于 2021-04-12T12:44:23.490 に答える
-1

私のために働く最短の答え。開始日と終了日をミリ秒単位で送信します。

public int GetDifference(long start,long end){
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(start);
    int hour = cal.get(Calendar.HOUR_OF_DAY);
    int min = cal.get(Calendar.MINUTE);
    long t=(23-hour)*3600000+(59-min)*60000;

    t=start+t;

    int diff=0;
    if(end>t){
        diff=(int)((end-t)/ TimeUnit.DAYS.toMillis(1))+1;
    }

    return  diff;
}
于 2017-01-09T05:19:45.120 に答える