Я работаю над живым тикером, и с помощью кода, который я нашел в Интернете, мне удалось найти что-то вроде работы.Проблема с обратным отсчетом Android
Я получаю дату из базы данных и разбиваю ее и помещаю ее в миллисекунды, и вот где я нашел код.
Теперь все остальное работает отлично, за исключением дней, кажется, всегда 30 дней плюс, но многие остались?
Это код:
GregorianCalendar endDate = new GregorianCalendar(Integer.parseInt(separated[0]), Integer.parseInt(separated[1]), Integer.parseInt(separated[2]), Integer.parseInt(Time[0]), Integer.parseInt(Time[1]), 00);
GregorianCalendar startDate = new GregorianCalendar(year, month, day, hours, minutes, seconds);
long diffInMs = endDate.getTimeInMillis() - startDate.getTimeInMillis();
new CountDownTimer(diffInMs, 1000) {
public void onTick(long millisUntilFinished) {
int seconds = (int)(millisUntilFinished/1000) % 60 ;
int minutes = (int)((millisUntilFinished/(1000*60)) % 60);
int hours = (int)((millisUntilFinished/(1000*60*60)) % 24);
int days = (int)((millisUntilFinished/(1000*60*60*24)) % 365);
//int years = (int)(millisUntilFinished/1000*60*60*24*365);
ArrayList<String> timeArray = new ArrayList<String>();
// if(years > 0)
// timeArray.add(String.valueOf(years) + "y");
if(days > 0)
timeArray.add(String.valueOf(days) + "d");
if(hours>0)
timeArray.add(String.valueOf(hours) + "h");
if(minutes>0)
timeArray.add(String.valueOf(minutes) + "min");
if(seconds>0)
timeArray.add(String.valueOf(seconds) + "sec");
String time = "";
for (int i = 0; i < timeArray.size(); i++)
{
time = time + timeArray.get(i);
if (i != timeArray.size() - 1)
time = time + ", ";
}
if (time == "")
time = "0 sec";
Countdown.setText("Database Lock: " + time);
}
Теперь я не могу понять, почему дни будет работать неправильно?
Любые идеи о том, что может быть неправильным?
Спасибо, Chris
Я пробовал свой код, и он работает нормально. Приведите пример входного значения, которое дает неверный результат. – pgsandstrom
Хорошо, что он вытащил эту дату из базы данных 2012-07-07 13:00:00, а затем разделил дату на части, я сделал небольшое изменение, чтобы остановить его сбой, потому что он пытался включить время, а затем добавляет время после. Во всяком случае, это говорит как 38d, 23h, 31min, 20sec ?? –
Я выяснил, почему я получал неправильный обратный отсчет в дни. Это связано с этим: int month = gregorianCalendar.get (GregorianCalendar.MONTH); Кажется, эта часть дает неправильный месяц? Его дает 5, а не 6? –