2012-06-15 9 views
9

Mögliche Duplizieren:
Calculating the Difference Between Two Java Date InstancesWie bekomme ich die Anzahl der Tage zwischen zwei Daten in Java?

Wie erhalte ich Anzahl der Tage zwischen zwei Daten in Java?

Was ist der beste Weg? Hier ist, was ich habe, aber es ist nicht das beste:

public static ConcurrentHashMap<String, String> getWorkingDaysMap(int year, 
    int month, int day){ 
     int totalworkingdays=0,noofdays=0; 
     String nameofday = ""; 
     ConcurrentHashMap<String,String> workingDaysMap = 
      new ConcurrentHashMap<String,String>(); 
     Map<String,String> holyDayMap = new LinkedHashMap<String,String>(); 
     noofdays = findNoOfDays(year,month,day); 

     for (int i = 1; i <= noofdays; i++) { 
      Date date = (new GregorianCalendar(year,month - 1, i)).getTime(); 
      // year,month,day 
      SimpleDateFormat f = new SimpleDateFormat("EEEE"); 
      nameofday = f.format(date); 

      String daystr=""; 
      String monthstr=""; 

      if(i<10)daystr="0"; 
      if(month<10)monthstr="0"; 

      String formatedDate = daystr+i+"/"+monthstr+month+"/"+year; 

      if(!(nameofday.equals("Saturday") || nameofday.equals("Sunday"))){ 
       workingDaysMap.put(formatedDate,formatedDate); 
       totalworkingdays++; 
      } 
     } 

     return workingDaysMap; 
    } 

public static int findNoOfDays(int year, int month, int day) { 
     Calendar calendar = Calendar.getInstance(); 
     calendar.set(year, month - 1, day); 
     int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
     return days; 
    } 
+2

Insbesondere diese Antwort: http://StackOverflow.com/a/4549327/22656 –

Antwort

22

ich in der Regel etwas tun, wie folgt aus:

final long DAY_IN_MILLIS = 1000 * 60 * 60 * 24; 

int diffInDays = (int) ((date1.getTime() - date2.getTime())/ DAY_IN_MILLIS); 

Keine Notwendigkeit für externe lib und leicht genug, um


Update: Just sah, dass Sie wollen, dass die "Termine" zwischen zu, ähnliche Methode gilt:

//assume date1 < date2 

List<Date> dateList = new LinkedList<Date>(); 
for (long t = date1.getTime(); t < date2.getTime() ; t += DAY_IN_MILLIS) { 
    dateList.add(new Date(t)); 
} 

Natürlich JODA Zeit oder andere lib kann Ihr Leben ein bisschen leichter machen mit, obwohl ich


-Update nicht die aktuelle Art und Weise schwierig sehen umzusetzen: Wichtiger Hinweis! dies funktioniert nur für Zeitzone, die keine Sommerzeit oder ähnliche Anpassung hat, oder Ihre Definition von "Differenz in Tagen" bedeutet eigentlich "Unterschied in der 24-Stunden-Einheit"

+2

Nur eine Erinnerung für Leute, die diesen Ansatz verwenden, das funktioniert nur für Zeitzonen, die keine Sommerzeit oder ähnliche Anpassungen haben. –

+0

Ich habe die Antworten auf das Original zurückgerollt, da die Bearbeitungen dieser Antwort etwas hinzufügen, das nicht Teil meiner ursprünglichen Antwort ist (mit Erwähnung von 'TimeUnit.MILLISECONDS.toDays (date1.getTime() - date2.getTime());)) Ich denke, eine solche Art von Bearbeitung ist besser, als eine andere Antwort anstatt die bestehende Antwort einer anderen Person zu ändern. –

+0

Ihr erster Kommentar hier ist wirklich wichtig. Dieser Ansatz gibt die falsche Antwort, wenn "date1" während der Sommerzeit auftritt und "date2" während der Nicht-Sommerzeit auftritt. Es ist daher falsch für jedes Land auf der Erde, das über Tageslicht verfügt. –

Verwandte Themen