Как получить разницу между двумя датами в днях, часах (24), минутах (60), секундах (60) в Android - PullRequest
0 голосов
/ 26 апреля 2018

Как получить разницу между двумя датами в днях, часах (24), минутах (60), секундах (60).

и

Я прошел через

Разница в Android между двумя датами

Как получить разницу между двумя датами в Android ?, пробовал каждую вещь и сообщение

но нетhelp,

Вот мой код ..

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

и вывод

        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. Итак, как мне этого добиться?

Ответы [ 6 ]

0 голосов
/ 26 апреля 2018
  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);
        }

Здесь я рассчитал только день, месяц, мин, секунду, вы можете рассчитать год, месяц, неделю таким же образом

0 голосов
/ 26 апреля 2018

Попробуйте этот метод

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;

    }
0 голосов
/ 26 апреля 2018

Вы можете сделать это, я надеюсь, это поможет вам.спасибо

   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;`
0 голосов
/ 26 апреля 2018

1. Divide разница по дням, чтобы получить количество дней / часов / минут / и т.д.

2. выполнить Modulo, чтобы получитьоставшиеся секунды.

Использование

    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 ));
0 голосов
/ 26 апреля 2018

Вы можете использовать время эпохи (метка времени unix) обеих дат и самостоятельно рассчитать разницу в днях, часах, минутах и ​​смс, используя оператор modulo (% - remainder).

0 голосов
/ 26 апреля 2018

Чтобы рассчитать часы отдыха, как вы сказали.(Таким образом, менее 24 часов) вы можете использовать по модулю.

В вычислениях операция по модулю находит остаток после деления одного числа на другое (иногда называемое модулем).

int hours = theAmountOfHours % 24

В вашем примере

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

Источники: Википедия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...