如何在Android中的天,小时(24),分钟(60),秒(60)中获得两个日期之间的差异

How to get difference between two dates in Days, Hours (24), Minutes (60), Seconds(60) in android

如何获取天,小时(24),分钟(60),秒(60)中两个日期之间的差异。

我一直在经历

Android两个日期之间的差异

如何在android中获取两个日期之间的差额?尝试所有操作并发布

但没有帮助

这是我的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  try {
        String FinalDate ="20-04-2018 08:00:00";
        String CurrentDate ="26-04-2018 10:10:30";
        Date date1;
        Date date2;

        SimpleDateFormat dates = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
        date1 = dates.parse(CurrentDate);
        date2 = dates.parse(FinalDate);

        /*long difference = date1.getTime() - date2.getTime();
        long differenceInMinutes = difference / (60 * 1000);
        long differenceInSeconds = difference / 1000;
        String strMinuteDifference = Long.toString(differenceInMinutes);
        String strSecondsDifference = Long.toString(differenceInSeconds);*/

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


        Log.e("TAG_5","CurrentDate is :" + date1);
        Log.e("TAG_5","Final date is :" + date2);
        Log.e("TAG_5","Day Difference:" + days);
        Log.e("TAG_5","hours Difference:" + hours);
        Log.e("TAG_5","Minute Difference:" + minutes);
        Log.e("TAG_5","Seconds Difference:" + seconds);


    } catch (Exception exception) {
        Log.e("TAG_5","exception" + exception);
    }

输出是

1
2
3
4
5
6
        E/TAG_5: CurrentDate is : Thu Apr 26 10:10:30 GMT+05:30 2018
        E/TAG_5: Demo date is : Fri Apr 20 08:00:00 GMT+05:30 2018
        E/TAG_5: Day Difference: 6
        E/TAG_5: hours Difference: 146
        E/TAG_5: Minute Difference: 8770
        E/TAG_5: Seconds Difference: 526230

它似乎就像代码是计算这两个日期之间的所有小时,分钟,秒,但是

我希望输出像...
小时应该是2小时,10小时或23小时,但不能超过24小时,因为25小时是新的一天,所以应该是1天1小时。

分钟为10分钟35分钟或59分钟,但不超过60分钟

同样是秒,应该是12秒,40秒或59秒,但不超过60秒。
那么我该如何实现呢?


计算您所说的"休息"时间。 (因此,在24小时以下)您可以使用模。

In computing, the modulo operation finds the remainder after division
of one number by another (sometimes called modulus).

int hours = theAmountOfHours % 24

在你的例子中

1
2
3
4
Log.e("TAG_5","Day Difference:" + days);
Log.e("TAG_5","hours Difference:" + hours % 24);
Log.e("TAG_5","Minute Difference:" + minutes % 60);
Log.e("TAG_5","Seconds Difference:" + seconds % 60);

资料来源:维基百科


试试这个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public void printDifferenceDateForHours(Date startDate, Date endDate) {
        //milliseconds
        long different = endDate.getTime() - startDate.getTime();

        long secondsInMilli = 1000;
        long minutesInMilli = secondsInMilli * 60;
        long hoursInMilli = minutesInMilli * 60;
        long daysInMilli = hoursInMilli * 24;

        //TODO Here you will get the days
        long elapsedDays = different / daysInMilli;
        different = different % daysInMilli;

        //TODO Here you will get the hours
        long elapsedHours = different / hoursInMilli;
        different = different % hoursInMilli;

        //TODO Here you will get the minute          
        long elapsedMinutes = different / minutesInMilli;
        different = different % minutesInMilli;

        //TODO Here you will get the second
        long elapsedSeconds = different / secondsInMilli;

    }


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  try {
            String FinalDate ="20-04-2018 08:00:00";
            String CurrentDate ="26-04-2018 10:10:30";
            Date date1;
            Date date2;

            SimpleDateFormat dates = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            date1 = dates.parse(CurrentDate);
            date2 = dates.parse(FinalDate);

            long seconds = 1000;
            long minutes = 60 * seconds;
            long hours = 60 * minutes;
            long days = 24 * hours;
            long weeks = 7 * days;
            long months = 30 * days;
            long year = 365 * days;

            long difference = date1.getTime() - date2.getTime();


            long differenceInDays = difference / days;
            difference = difference - (differenceInDays * days);
            long differenceInHours = (difference) / hours;
            difference = difference - (differenceInHours * hours);
            long differenceInMin = (difference) / minutes;
            difference = difference - (differenceInMin * minutes);
            long differenceInSecond = difference / seconds;


            Log.e("TAG_5","CurrentDate is :" + date1);
            Log.e("TAG_5","Final date is :" + date2);
            Log.e("TAG_5","Day Difference:" + differenceInDays);
            Log.e("TAG_5","hours Difference:" + differenceInHours);
            Log.e("TAG_5","Minute Difference:" + differenceInMin);
            Log.e("TAG_5","Seconds Difference:" + differenceInSecond);


        } catch (Exception exception) {
            Log.e("TAG_5","exception" + exception);
        }

在这里,我只计算了天,月,分钟,秒,就可以以相同的方式计算年,月,周


您可以这样做,希望对您有所帮助。 谢谢

1
2
3
4
5
6
7
8
9
10
11
12
   String CurrentDate ="26-04-2018 10:10:30";
   String FinalDate ="20-04-2018 08:00:00";

   long diffInMillisec = CurrentDate.getTime() - FinalDate.getTime();
   long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMillisec);
   seconds = diffInSec % 60;
   diffInSec/= 60;
   minutes =diffInSec % 60;
   diffInSec /= 60;
   hours = diffInSec % 24;
   diffInSec /= 24;
   days = diffInSec;`

1. Divide天数之差,以获得天数/小时/分钟/等。

2.执行Modulo以获取剩余的秒数。

采用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    long difference="your difference result here";
    long seconds =1000;
    long minutes =60*seconds;
    long hours = 60*minutes;
    long days = 24*hours;
    long weeks=7*days;
    long months=30*days;
    long year=365*days;

    if(difference>year) {
        Log.d("year", String.valueOf(difference / year));
        difference = difference % year;
    }
    if(difference>months) {
        Log.d("months", String.valueOf(difference / months));
        difference = difference % months;
    }
    if(difference>weeks) {
        Log.d("weeks", String.valueOf(difference / weeks));
        difference = difference % weeks;
    }
    if(difference>days) {
        Log.d("days", String.valueOf(difference / days));
        difference = difference % days;
    }
    if(difference>hours) {
        Log.d("hours", String.valueOf(difference / hours));
        difference = difference % hours;
    }
    if(difference>minutes) {
        Log.d("minutes", String.valueOf(difference / minutes));
        difference = difference % minutes;
    }
    if(difference>0)
        Log.d("seconds", String.valueOf(difference/seconds ));

您可以使用两个日期的纪元时间(unix时间戳),并使用模(%-余数)运算符自己计算天,小时,分钟和短信的差值。