Я делаю приложение, в котором мне нужно получить оставшееся время в день события, с помощью класса 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();
Сначала вам нужно получить разницу в миллисекундах:
Затем выполните операции, чтобы узнать разницу в единицах измерения, которые вам нужны:
Необходимо учитывать, что при выполнении целочисленного деления в расчет вносится ошибка усечения.
С помощью этого метода вы можете добиться этого, и это похоже на то, что вы делаете:
Определяем даты, на которые хотим получить разницу:
Из значений выполняем метод
getDiferencia()
с начальной и конечной датой:Метод внутренне печатает дату начала и окончания, поэтому вы можете проверить значения:
и получает строку со значениями разности:
Я добавляю свое полное решение моей проблемы для будущих вопросов.
Сначала объявите переменные для использования.
Затем мы инициализируем переменную
calendar
новым экземпляром и отправляем дату нашего будущего события.Теперь инициализируем переменные типа
Date
=eventDate
день события иpresentDate
=текущий день, первая получает свое значение из ранее созданного календаря, а вторая из текущего дня.Следующим шагом мы получаем разницу в миллисекундах, назначая сначала день события, а затем текущий день, мы сохраняем результаты в переменной типа
long
и отправляем ихLog
для проверки того, что результат не является отрицательным, если даты назначены неправильно.Следующим шагом мы получаем эквивалентность в днях, часах, минутах и секундах с помощью этих простых математических операций, все результаты сохраняются в переменных типа
long
.Это даст нам, например, следующий результат:
Так как мне нужно сделать счетчик к дате, я инициализирую переменную
ìnitialTime
значением разницыdiff
.И затем я присваиваю значения конструктору для инициализации переменной
countDownTimer
:При этом
CountDownTimer
работает от текущей даты до даты события.