簡體   English   中英

日期之間的差異以獲得“時間之前”

[英]Difference between dates to get “time ago”

我有一個約會。 想將其與當前日期進行比較,並希望在時間前獲得結果。

Date d1 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.
            getParameter(date1));
Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.
            getParameter(date2));

long diff = d2.getTime() - d1.getTime();

並希望與以前的格式有所不同。

例如。 3小時2分鍾前

如果可以使用其他庫,我建議使用Joda Time ,尤其是JSR 310 ,它將在JDK 8中作為新的Date API引入,重新定義了Joda time。

與Joda Time的時差在這里

如果您只想使用核心Java而不用數字文字污染代碼:

long diffInMillis = d2.getTime() - d1.getTime();
long diffInHours = TimeUnit.MILLISECONDS.toHours(diffInMillis);
long diffInMins = TimeUnit.MILLISECONDS.toMinutes(diffInMillis);
System.out.printf("%d hours %d mins ago%n", diffInHours, (diffInMins - TimeUnit.HOURS.toMinutes(diffInHours)));

您的值是毫秒,所以

int min= (int) ((diff / (1000*60)) % 60);
int sec= (int) (diff / 1000) % 60 ;

嘗試,

 long diff = d2.getTime() - d1.getTime();
 long m= diff/(60*1000);
 long hour=m/60;
 long minutes=m%60;

 System.out.printf("%d hours %d mins ago%n", hour, minutes)

以下是按照您的要求獲取的另一種方法,但是不建議使用getHours()getMinutes() ,只需執行System.out.println((d2.getHours()-d1.getHours())+" hours " +(d2.getMinutes()-d2.getMinutes()) +" mins ago" );

friends。我認為我們可以做到這一點,我的代碼:

public static String getIntervalUpdateTime(long intervalTime) {
    StringBuilder result = new StringBuilder();
    long interval = intervalTime / 1000;
    final long day = 24 * 60 * 60;
    final long hour = 60 * 60;
    final long minute = 60;
    int detailDay = 0;
    int detailHour = 0;
    int detailMinute = 0;
    int detailSecond = 0;
    if (interval >= day) {
        detailDay = (int) (interval / day);
        interval = interval - detailDay * day;
    }
    if (interval >= hour) {
        detailHour = (int) (interval / hour);
        interval = interval - hour * detailHour;
    }
    if (interval >= minute) {
        detailMinute = (int) (interval / minute);
        interval = interval - detailMinute * minute;
    }
    if (interval > 0) {
        detailSecond = (int) interval;
    }
    result.setLength(0);
    if (detailDay > 0) {
        result.append(detailDay);
        result.append("day");
    }
    if (detailHour > 0) {
        result.append(detailHour);
        result.append("hour");
    }
    if (detailMinute > 0) {
        result.append(detailMinute);
        result.append("minutes");
    }
    if (detailSecond > 0) {
        result.append(detailSecond);
        result.append("seconds");
    }
    return result.toString();
}

這是我的答案。

使用為此目的而構建的Joda-Time 2.3中的Period類。

請參閱問題答案(尤其是這一部分 )中的示例代碼,該問題如何從現在開始使用Joda-Time計算經過的時間?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM