2012-06-29 3 views
-1

Я работаю над живым тикером, и с помощью кода, который я нашел в Интернете, мне удалось найти что-то вроде работы.Проблема с обратным отсчетом 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

+0

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

+0

Хорошо, что он вытащил эту дату из базы данных 2012-07-07 13:00:00, а затем разделил дату на части, я сделал небольшое изменение, чтобы остановить его сбой, потому что он пытался включить время, а затем добавляет время после. Во всяком случае, это говорит как 38d, 23h, 31min, 20sec ?? –

+0

Я выяснил, почему я получал неправильный обратный отсчет в дни. Это связано с этим: int month = gregorianCalendar.get (GregorianCalendar.MONTH); Кажется, эта часть дает неправильный месяц? Его дает 5, а не 6? –

ответ

1

Если вы имеете в виду, чтобы занять дни, часы, минуты, второй отличается это код работает для меня.

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 

public class DateDiff{ 

    public static void main(String[] args){ 

    Date date = null; 
    Date date1 = new Date(); 
    System.out.println(date1.toString()); 


    try { 
    String str_date="Tue, 25 Jun 2012 05:43:27"; 
    DateFormat formatter ; 
    //Date date ; 
    formatter = new SimpleDateFormat("EEE,dd MMM yy HH:mm:ss"); 
    date = (Date)formatter.parse(str_date); 
    System.out.println("Today is " +date); 
    } catch (ParseException e) 
    { 

    System.out.println("Exception :"+e); 

    } 

    long diff = date1.getTime() - date.getTime(); 
    long seconds = diff/1000; 
    long minutes = seconds/60; 
    long hours = minutes/60; 
    long days = hours/24; 


     System.out.println("Time in seconds: " + seconds 
     + " seconds."); 
     System.out.println("Time in minutes: " + minutes 
    + " minutes."); 
     System.out.println("Time in hours: " + hours 
    + " hours."); 
     System.out.println("Time in days: " +days 
    + " days."); 



    } 
} 
Смежные вопросы