2016-08-30 2 views
1

Ich weiß, es gibt andere ähnliche Fragen, die hier schon einmal gestellt wurden, aber soweit versucht wurde, hat keiner die gewünschte Ausgabe erzeugt, z.B. Differenz zwischen dem 02.09.2016 und dem 30.08.2016 sollte 3 Kalendertage betragen.Berechne den Unterschied zwischen zwei Kalendertagen in Tagen

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

    int year = (int) diff/365; 
    int rest = (int) diff % 365; 
    int month = rest/30; 
    rest = rest % 30; 
    int weeks = rest/7; 
    int dayss = rest % 7; 

    long diffMillis= Math.abs(oldDate.getTime() - currentDate.getTime()); 
    long differenceInDays = TimeUnit.DAYS.convert(diffMillis, TimeUnit.MILLISECONDS); 

    Log.d("ASDafldsfg", "" + days); 
    Log.d("ASDafldsfg", "" + dayss); 
    Log.d("ASDafldsfg", "" + differenceInDays); 

und der Ausgang ist, wie folgend während Differenz zwischen 30.08.16 Berechnen und 03.09.16

D/ASDafldsfg: 3 
D/ASDafldsfg: 6 
D/ASDafldsfg: 3 
+0

Mögliches Duplikat [Android Differenz zwischen zwei Daten] (http://stackoverflow.com/questions/21285161/android-difference-between-two-dates) – user392117

Antwort

1

einfach doppelt Gießen zu schweben und dann Math.ceil Anwendung() fixiert die Problem,

long diff = oldDate.getTime() - currentDate.getTime(); float days = (float) diff/1000/60/60/24; tv_days.setText(String.valueOf((int) Math.ceil(days)));

2

Dieses versuchen:

DateTimeUtils obj = new DateTimeUtils(); 
    SimpleDateFormat simpleDateFormat = 
      new SimpleDateFormat("dd/M/yyyy hh:mm:ss"); 

    try { 

    Date date1 = simpleDateFormat.parse("10/10/2013 11:30:10"); 
    Date date2 = simpleDateFormat.parse("13/10/2013 20:35:55"); 

    obj.printDifference(date1, date2); 

    } catch (ParseException e) { 
    e.printStackTrace(); 
    } 

} 

//1 minute = 60 seconds 
//1 hour = 60 x 60 = 3600 
//1 day = 3600 x 24 = 86400 
public void printDifference(Date startDate, Date endDate){ 

    //milliseconds 
    long different = endDate.getTime() - startDate.getTime(); 

    System.out.println("startDate : " + startDate); 
    System.out.println("endDate : "+ endDate); 
    System.out.println("different : " + different); 

    long secondsInMilli = 1000; 
    long minutesInMilli = secondsInMilli * 60; 
    long hoursInMilli = minutesInMilli * 60; 
    long daysInMilli = hoursInMilli * 24; 

    long elapsedDays = different/daysInMilli; 
    different = different % daysInMilli; 

    long elapsedHours = different/hoursInMilli; 
    different = different % hoursInMilli; 

    long elapsedMinutes = different/minutesInMilli; 
    different = different % minutesInMilli; 

    long elapsedSeconds = different/secondsInMilli; 

    System.out.printf(
     "%d days, %d hours, %d minutes, %d seconds%n", 
     elapsedDays, 
     elapsedHours, elapsedMinutes, elapsedSeconds); 

} 

Ausgang ist:

startDate : Thu Oct 10 11:30:10 SGT 2013 
endDate : Sun Oct 13 20:35:55 SGT 2013 
different : 291945000 
3 days, 9 hours, 5 minutes, 45 seconds 
1

Joda-Time bietet einen hochwertigen Ersatz für Java-Datum und Uhrzeit Klassen. Das Design ermöglicht mehrere Kalendersysteme, während eine einfache API bereitstellt.

Es ist einfach zu handhaben mit Datum und Uhrzeit.

Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays() 

Joda Demo

+0

welche Art von Objekt ist " Start "und" Ende "? @Sohail Zahid – Nilabja

+0

sein Datum können Sie die Demo-App sehen –

+0

Ich kämpfte einen ganzen Tag, um die JAVA Datum Probleme arbeiten - bis ich endlich aufgegeben und wechselte zu JODA - alles dank dieser One-Liner von Ihnen, @SohailZahid. –

1

JDK 1.8 eingeführt LOCALDATE und es hat das Leben viel einfacher für Menschen gemacht ... Sie können es verwenden, den Unterschied zwischen zwei Daten zu berechnen:

Klassen verwendet:

import java.time.Month; 
import java.time.LocalDate; 
import java.time.temporal.ChronoUnit; 

LocalDate dateBefore=LocalDate.of(2016,09,02); // you can also use Month.SEPTEMBER 
LocalDate dateAfter=LocalDate.of(30,08,2016); //you can also use Month.AUGUST 
long daysBetween = DAYS.between(dateBefore, dateAfter); // this is the chronounit for Days :) 

Die neue Zeit api ist extremeley mächtig, bitte verwenden sie für die Bequemlichkeit

Da Android zur Zeit nicht alle jdk 1.8 Funktionen unterstützen, wird die oben nicht hilfreich sein, verwenden Sie die folgende statt

date1 and date2 are normal Date objects obtained using calendar object initialized to your date and then Calendar.getTime() 

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

wie bekomme ich "ChronoUnit" mit jdk 1.8.0_60 in android studio 2.1.3 – Nilabja

+0

sorry überprüfen sie meine bearbeitete antwort ... vergessen, dass android dumm jetzt lambdas unterstützt aber nicht die zeit api ... – Kushan

Verwandte Themen