user8252960
user8252960

Reputation:

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

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

and

I have been go through

Android difference between Two Dates

How do I get difference between two dates in android?, tried every thing and post

but no help,

Here is my code..

  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);
    }

and the output is

        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

Its seems be like the code is Calculate All the Hours, Minutes, Seconds between those two dates but

I want Output be like... Hours should be like 2 hours, 10 hours or 23 hours but not more than 24, because 25 hours will be new day so that should be 1 Day and 1 hour.

and Minutes be like 10 minutes 35 minutes or 59 minutes, but not more than 60

same goes for Seconds, it should be 12 seconds, 40 seconds or 59 seconds but not more than 60. So how can i achieve this ?

Upvotes: 1

Views: 762

Answers (6)

MJM
MJM

Reputation: 5311

  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);
        }

Here i have calculated only day,month,min,second you can calculate year,month,week same way

Upvotes: 1

Siddharth Patel
Siddharth Patel

Reputation: 205

Try this method

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;

    }

Upvotes: 1

Jyoti JK
Jyoti JK

Reputation: 2171

1.Divide the difference by days to get number of days/hours/minutes/etc.

2.perform Modulo to get the remaining seconds.

Use

    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 ));

Upvotes: 0

Dnyaneshwar Panchal
Dnyaneshwar Panchal

Reputation: 444

You can do this way, I hope it help for you. thanks

   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;`

Upvotes: 0

Ron Nabuurs
Ron Nabuurs

Reputation: 1556

To calculate the "rest" hours like you said. (So below 24 hours) you can use modulo.

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

int hours = theAmountOfHours % 24

In your example

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);

Sources: Wikipedia

Upvotes: 2

maveroid
maveroid

Reputation: 1880

You can use epoch time (unix timestamp) of both the dates and calculate the days, hours, mins and sms difference yourself using the modulo (% - remainder) operator.

Upvotes: 0

Related Questions