2012-06-29 88 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); 


     } 

現在,我看不出爲什麼會天摸出錯了嗎?

關於可能出錯的任何想法?

謝謝, 克里斯

+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."); 



    } 
}