Я реализую Приложение, где я нуждаюсь в том, чтобы получить остальное время для дня события, используя класс 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();
Сначала нужно получать различие в миллисекундах:
long diff = date1.getTime() - date2.getTime();
Потом делать операции, чтобы знать различие в единице, которой ты требуешь:
long segundos = diff / 1000;
long minutos = segundos / 60;
long horas = minutos / 60;
long dias = horas / 24;
Ты должен считать, что, сделав целое деление, попадает в вычисление ошибка из-за урезывания.
С этим 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
Я добавляю мое полное решение для моей проблемы для будущих вопросов.
Сначала Объявите переменные, которые было нужно использовать.
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
функционируй с настоящей даты к дате события.