2016-08-03 10 views
0

Ich versuche, eine Android-App zu entwickeln, die anzeigt, wie viele Jahre, Monate und Tage für das zukünftige Datum angegeben wurden. Allerdings bekomme ich Werte:/D-Day Counter Java

Hier werden das verbleibende Jahr, Monat und Tage bis 2018/06/18 berechnet: Berechnung der verbleibenden Monate waren ziemlich schwierig, da jeder Monat unterschiedliche Anzahl von Tagen haben kann. Ich glaube also, dass ich einen Fehler gemacht habe, als ich versuchte, die verbleibenden Monate zu erhalten. Doch mein Ergebnis war frustrierend: Ich habe 41 Jahre, 01 Monate, negativ wield Wert Tage ...

public void countDownStart() { 
    handler = new Handler(); 
    runnable = new Runnable() { 
     @Override 
     public void run() { 
      handler.postDelayed(this, 1000); 
      long diff; 
      long years=0; 
      long months=0; 
      long days=0; 
      long temp_days=0; 
      int current_month; 

      Calendar futureDate = Calendar.getInstance(); 
      futureDate.set(Calendar.DAY_OF_MONTH, 18); 
      futureDate.set(Calendar.MONTH, 6); 
      futureDate.set(Calendar.YEAR, 2018); 
      Calendar referenceDate = Calendar.getInstance(); 

      Calendar currentDate = Calendar.getInstance(); 

      if (futureDate.after(currentDate)) { 
       diff = futureDate.getTimeInMillis() - currentDate.getTimeInMillis(); 
       days = diff/(1000*60*60*24); 
       years = diff/(1000 * 60 * 60 * 24 * 365); 
       diff = diff - years * 1000 * 60 * 60 * 24 * 365; 
       months = 0; 
       boolean flag = true; 
       current_month = referenceDate.get(Calendar.MONTH); 
       while (flag) { 
        switch (current_month) { 
         case 0: 
         case 2: 
         case 4: 
         case 6: 
         case 7: 
         case 9: 
         case 11: 
          diff = diff - 1000 * 60 * 60 * 24 * 31; 
          break; 
         case 1: 
          diff = diff - 1000 * 60 * 60 * 24 * 28; 
          break; 
         case 3: 
         case 5: 
         case 8: 
         case 10: 
          diff = diff - 1000 * 60 * 60 * 24 * 31; 
          break; 
        } 
        months = months + 1; 
        referenceDate.add(Calendar.MONTH, 1); 
        current_month=referenceDate.get(Calendar.MONTH); 
        temp_days = diff/1000 * 60 * 60 * 24; 

        if (temp_days <= 31) { 
         int next_month = referenceDate.get(Calendar.MONTH); 
         int days_in_month; 

         if (next_month == 0 || next_month == 2 || next_month == 4 || next_month == 6 || 
           next_month == 7 || next_month == 9 || next_month == 11) { 
          days_in_month = 31; 
         } else if (next_month == 1) { 
          days_in_month = 28; 
         } else { 
          days_in_month = 30; 
         } 

         if (temp_days < days_in_month) { 
          flag = false; 
          //days = temp_days; 
         } 
        } 
       } 


      } 
      else 
      { 
       years=0; 
       months=0; 
       days=0; 
      } 
      txtTimerYear.setText(""+String.format("%02d",years)); 
      txtTimerMonth.setText(""+String.format("%02d",months)); 
      txtTimerDay.setText(""+String.format("%03d",days)); 

     } 
    }; 
    handler.postDelayed(runnable,1*1000); 
} 

}

Ich würde schätzen wirklich Ihre Hilfe !! Danke !!

Antwort

1

Verwenden Sie Joda Time Bibliothek. Es hat Methoden, die dir direkt verbleibende Monate, Tage usw. geben. Und es berücksichtigt die Monate, die 30 oder 31 Tage haben.