Получать остальное время между двумя датами Восходило в Android

Я реализую Приложение, где я нуждаюсь в том, чтобы получить остальное время для дня события, используя класс CountDownTimer ему удайтесь получить счетчик дней часы и даты, но со мной не случается, как получение остального времени.

Для этого у меня есть две даты, установленные посредством двух Date и я нуждаюсь в том, чтобы узнать остальное время между ними, для даты события у меня есть формат:

Date(int year, int month, int day, int hour, int minute, int second);

И для настоящего времени просто я произвожу нового восходите

Date date = new Date();

Поскольку я могу получать остальное время в дни, часы, минуты и секунды.

Мой код, в котором только у меня есть счетчик с настоящим временем до события:

Сначала объявите переменные:

private TextView countDown;
private CountDownTimer countDownTimer;
private long initialTime =
            DateUtils.DAY_IN_MILLIS * 110 +
            DateUtils.HOUR_IN_MILLIS * 9 +
            DateUtils.MINUTE_IN_MILLIS * 3 +
            DateUtils.SECOND_IN_MILLIS * 42;

и после я этим манипулировал в CountDownTimer:

       countDownTimer = new CountDownTimer(initialTime, 1000) {
            StringBuilder time = new StringBuilder();

            @Override
            public void onTick(long millisUntilFinished) {
                time.setLength(0);
                // Use days if appropriate
                if(millisUntilFinished > DateUtils.DAY_IN_MILLIS) {
                    long count = millisUntilFinished / DateUtils.DAY_IN_MILLIS;
                    if(count > 1)
                        time.append(count).append(" Dias ");
                    else
                        time.append(count).append(" Dia ");

                    millisUntilFinished %= DateUtils.DAY_IN_MILLIS;
                }

                time.append(DateUtils.formatElapsedTime(Math.round(millisUntilFinished / 1000d)));
                countDown.setText(time.toString());
            }

            @Override
            public void onFinish() {
                countDown.setText(DateUtils.formatElapsedTime(0));
                countDown.setText("Dia del evento");
            }


        }.start();
2
задан 02.06.2016, 06:43
3 ответа

Сначала нужно получать различие в миллисекундах:

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

Потом делать операции, чтобы знать различие в единице, которой ты требуешь:

long segundos = diff / 1000;
long minutos = segundos / 60;
long horas = minutos / 60;
long dias = horas / 24;

Ты должен считать, что, сделав целое деление, попадает в вычисление ошибка из-за урезывания.

5
ответ дан 24.11.2019, 14:15

С этим mГ©todo ты можешь добиваться этого и он сходный с тем, что ты реализуешь:

public String getDiferencia(Date fechaInicial, Date fechaFinal){

    long diferencia = fechaFinal.getTime() - fechaInicial.getTime();

    Log.i("MainActivity", "fechaInicial : " + fechaInicial);
    Log.i("MainActivity", "fechaFinal : " + fechaFinal);

    long segsMilli = 1000;
    long minsMilli = segsMilli * 60;
    long horasMilli = minsMilli * 60;
    long diasMilli = horasMilli * 24;

    long diasTranscurridos = diferencia / diasMilli;
    diferencia = diferencia % diasMilli;

    long horasTranscurridos = diferencia / horasMilli;
    diferencia = diferencia % horasMilli;

    long minutosTranscurridos = diferencia / minsMilli;
    diferencia = diferencia % minsMilli;

    long segsTranscurridos = diferencia / segsMilli;

    return "diasTranscurridos: " + diasTranscurridos + " , horasTranscurridos: " + horasTranscurridos +
            " , minutosTranscurridos: " + minutosTranscurridos + " , segsTranscurridos: " + segsTranscurridos;


}

Мы Определяем даты, в которых мы хотим получить различие:

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/M/yyyy hh:mm:ss");
    Date fechaI = null, fechaF = null;
    try {
        fechaI = simpleDateFormat.parse("1/6/2016 12:20:12");
         //fechaF puede ser la fecha actual o tu puedes asignarala,
         //por ejemplo: fechaF = simpleDateFormat.parse("2/6/2016 15:40:42");
         fechaF = new Date(System.currentTimeMillis());
    } catch (ParseException e) {
        e.printStackTrace();
    }

Начиная со стоимости мы выполняем mГ©todo getDiferencia() с начальной датой и финалом:

  Log.i(TAG,  getDiferencia(fechaI , fechaF));

mГ©todo внутри печатает начальную и конечную дату, для того, чтобы ты смог проверять стоимость:

fechaInicial : Wed Jun 01 00:20:12 CDT 2016
fechaFinal : Thu Jun 02 11:32:16 CDT 2016

и он получает string со стоимостью различия:

diasTranscurridos: 1 , horasTranscurridos: 11 , minutosTranscurridos: 12 , segsTranscurridos: 4
1
ответ дан 24.11.2019, 14:15

Я добавляю мое полное решение для моей проблемы для будущих вопросов.

Сначала Объявите переменные, которые было нужно использовать.

private TextView countDown;
private CountDownTimer countDownTimer; 
private Date eventDate, presentDate;
private Calendar calendar;
private long initialTime;

После мы инициализируем переменную calendar с новой инстанцией и мы посылаем дату нашего будущего события.

 calendar = Calendar.getInstance();
 calendar.set(Calendar.YEAR, 2016);
 calendar.set(Calendar.MONTH, Calendar.AUGUST);
 calendar.set(Calendar.DAY_OF_MONTH, 20);
 calendar.set(Calendar.HOUR_OF_DAY, 7);
 calendar.set(Calendar.MINUTE, 0);
 calendar.set(Calendar.SECOND, 0);

Сейчас мы инициализируем переменные типа Date что eventDate = день события и presentDate = в настоящий день, первая получает Вашу стоимость предыдущего созданного календаря разум и вторая текущего дня.

 eventDate = calendar.getTime();
 presentDate = new Date();

Следующий шаг мы получаем различие в военной службе секунды распределяя сначала день события и после настоящий день, сохраняем результаты в одной изменчивый тип long и мы посылаем их в Log чтобы проверять, что результат не был отрицательным, того, чтобы быть таким, даты распределены плохо.

long diff = eventDate.getTime() - presentDate.getTime();
Log.d("dateEvent", String.valueOf(eventDate));
Log.d("dateActual", String.valueOf(presentDate));
Log.d("diff", String.valueOf(diff)); 

Следующий шаг мы получаем эквивалентность в дни, часы, минуты и секунды с этими математическими простыми операциями, все результаты сохраняют в переменных тип long.

Это даст нам как оказанный например:

diff равняйся в 5 3-ьих чисел часы 23 минуты и 5 секунд

/**
 * Explicación:
 * segundos = (milisegundos / 1 segundo en milisegundos) mod 60 segundos de un minuto
 */
long seconds =(diff/1000)%60;
long minutes=(diff/(1000*60))%60;
long hours=(diff/(1000*60*60))%24;
long days=(diff/(1000*60*60*24))%365;

Поскольку я нуждаюсь в том, чтобы сделать счетчик к дате, я инициализирую переменную ìnitialTime со стоимостью различия diff.

 initialTime = diff;

И после я распределяю стоимость строителю инициализировать переменную countDownTimer:

countDownTimer = new CountDownTimer(initialTime, 1000) {

            @Override
            public void onTick(long millisUntilFinished) {

                int days = (int) ((millisUntilFinished / 1000) / 86400);
                int hours = (int) (((millisUntilFinished / 1000)
                        - (days * 86400)) / 3600);
                int minutes = (int) (((millisUntilFinished / 1000)
                        - (days * 86400) - (hours * 3600)) / 60);
                int seconds = (int) ((millisUntilFinished / 1000) % 60);

                String countDownText = String.format("%2d Dias %2d Hr %2d Min %2d Seg", days, hours, minutes, seconds);
                countDown.setText(countDownText);
            }

            @Override
            public void onFinish() {
                countDown.setText(DateUtils.formatElapsedTime(0));
            }

        }.start();

С этим CountDownTimer функционируй с настоящей даты к дате события.

0
ответ дан 24.11.2019, 14:15