2

重複の可能性:
2 つの Java 日付インスタンスの差の計算 Java
を使用して 2 つの日付の差を計算する方法

いくつかの例を使用して2つの日付を区別しようとしましたが、正しい答えが得られませんでした。

java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
 java.util.Date date1 = df.parse("2012-09-14 15:26:14+00");
 java.util.Date date2 = df.parse("2012-08-30 15:26:14+00");
 long diff = Math.abs(date2.getTime() - date1.getTime());
 System.out.println("millisecond="+diff);

私も月差が欲しいのですが、それは私に与えませんでした。それは私に違いの日、時間、分、秒を与えていますが、月ではありません.何が間違っていますか? 私を助けてください

編集:

java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
 java.util.Date date1 = df.parse("2012-09-30 15:26:14+00");
 java.util.Date date2 = df.parse("2012-08-30 15:26:14+00");
 long diff = Math.abs(date2.getTime() - date1.getTime());
 System.out.println(date2.getTime()+"date2");
 System.out.println(date1.getTime()+"date1");
 System.out.println("millisecond="+diff);
 diff=diff/1000;
 System.out.println("second="+diff);
 long days=diff/86400;
 days=days%86400;
 long hours=diff/3600;
 hours=hours%3600;
 long min=diff/60;
 min=min%60;
 hours=(hours-(24*days));
 String time=days+":"+hours+":"+min;
 System.out.println(time);
System.out.println("days="+days+":"+"hours="+hours+":"+"minutes"+min);

これが私がやろうとしていることです。

4

5 に答える 5

5

Java 用のJodaタイム ライブラリを使用できます。それを使用して日付間の時間差を計算する方がはるかに簡単です。

time-diff のサンプル スニペット:

Days d = Days.daysBetween(startDate, endDate);
int days = d.getDays();
于 2012-12-10T09:33:24.440 に答える
2

getDuration(date1, date2, Calendar.MONTH); として呼び出します。

 public static long getDuration(Date returnTime, Date leaveTime, int scale) {
        long durationInMillis = returnTime.getTime() - leaveTime.getTime();
        switch (scale) {
            case Calendar.MINUTE:
                return durationInMillis / ONE_MINUTE_IN_MILLIS;
            case Calendar.MILLISECOND:
                return durationInMillis;
            case Calendar.SECOND:
                return durationInMillis / ONE_SECOND_IN_MILLIS;
            case Calendar.HOUR:
                return durationInMillis / ONE_HOUR_IN_MILLIS;
            case Calendar.DAY_OF_YEAR:
            case Calendar.DATE:
                return durationInMillis / ONE_DAY_IN_MILLIS;
            case Calendar.MONTH:
                return durationInMillis / ONE_MONTH_IN_MILLIS; // 30days per month
        }
        throw new IllegalArgumentException("invalid scale specified");
    }
于 2012-12-10T09:45:29.380 に答える
1

Date.getTime秒ではなく、ミリ秒を返します。秒を取得するには、1000 で割る必要があります。

long diff = Math.abs(date2.getTime() - date1.getTime()) / 1000;

また、コメントに記載されているように、フォーマット文字列が正しくありません。これは次のようになります。

"yyyy-MM-dd HH:mm:ss"
于 2012-12-10T09:33:25.570 に答える
0

まず、yyyy-mm-dd hh:mm:ss を yyyy-MM-dd HH:mm:ss に変更しましょう。

日付の違いは Calendar クラスでのみ計算できます。以下は私の Calendar ベースのソリューションです。これが最適かどうかはわかりませんが、確実に機能しています。2012-09-30 15:26:14+00 - 2012-08-30 15:26:14+00 は 1 か月です。しかし、2012-09-30 15:26:14+00 - 2012-08-30 15:26:15+00 は 0 月です。結果はライトセービング設定に依存するため、ロケールも重要であることに注意してください。コードからすべてが明らかであることを期待して、私はそれについてコメントしません

public static void main(String[] args) throws Exception {
    java.text.DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    java.util.Date date1 = df.parse("2012-09-30 15:26:14+00");
    java.util.Date date2 = df.parse("2012-08-30 15:26:14+00");
    int diff = getMonthDifference(date1, date2);
    System.out.println(diff);
}

.

public static int getMonthDifference(java.util.Date date1, java.util.Date date2) {
    if (date1.after(date2)) {
        return getMonthDifference0(date1, date2);
    } else if (date2.after(date1)) {
        return -getMonthDifference0(date2, date1);
    }
    return 0;
}

.

private static int getMonthDifference0(java.util.Date date1, java.util.Date date2) {
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.setTime(date1);
        c2.setTime(date2);
        int diff = 0;
        while (c2.getTimeInMillis() < c1.getTimeInMillis()) {
            c2.add(Calendar.MONTH, 1);
            diff++;
        }
        int dd = c2.get(Calendar.DAY_OF_MONTH) - c1.get(Calendar.DAY_OF_MONTH);
        if (dd > 0) {
            diff--;
        } else if (dd == 0) {
            int hd = c2.get(Calendar.HOUR_OF_DAY) - c1.get(Calendar.HOUR_OF_DAY);
            if (hd > 0) {
                diff++;
            } else if (hd == 0) {
                long t1 = c1.getTimeInMillis() % (60 * 1000);
                long t2 = c2.getTimeInMillis() % (60 * 1000);
                if (t2 > t1) {
                    diff--;
                }
            }
        }
        return diff;
    }
于 2012-12-10T11:28:40.010 に答える
0

あなたが得ている違いは、秒ではなく、2 つの日付の間のミリ秒数です。指定した日付の差は 1 か月ではないことに注意してください。

于 2012-12-10T09:33:36.440 に答える