2016-08-30 2 views
1

Je sais qu'il y a d'autres questions similaires qui ont déjà été posées ici, mais pour autant qu'elles aient été essayées, aucune n'a produit la sortie désirée, par ex. différence entre 02.09.2016 et 30.08.2016 devrait être de 3 jours civils.Calculer la différence entre deux dates de calendrier en jours

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); 

et la sortie est la suivante lors du calcul de la différence entre le 30.08.16 et le 03.09.16

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

double possible de [la différence entre deux dates Android] (http://stackoverflow.com/questions/21285161/android-difference-between-two-dates) – user392117

Répondre

1

juste coulée double pour flotter, puis en appliquant Math.ceil() fixe la problème,

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

2

Essayez ceci:

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); 

} 

sortie est:

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 fournit un remplacement de qualité pour les classes Java . La conception permet plusieurs systèmes de calendrier, tandis que fournit une API simple.

Facile à utiliser avec la date et l'heure.

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

Joda Demo

+0

quel type d'objet est " début "et" fin "? @Sohail Zahid – Nilabja

+0

sa date à laquelle vous pouvez voir l'application de démo –

+0

J'ai eu du mal toute une journée pour faire fonctionner les problèmes de date JAVA - jusqu'à ce que j'abandonne finalement et ai changé pour JODA - tout cela grâce à ce one-liner par toi, @SohailZahid. –

1

1.8 introduit LOCALDATE JDK et il a rendu la vie beaucoup plus facile pour les gens ... Vous pouvez l'utiliser pour calculer la différence entre deux dates suivantes:

classes utilisées:

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 :) 

La nouvelle api de temps est extremeley puissant, s'il vous plaît ne pas utiliser pour la commodité

Depuis Android ne supporte pas toutes les caractéristiques jdk 1.8, ce qui précède ne sera pas utile, utilisez les touches suivantes à la place

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

comment obtenir "ChronoUnit" en utilisant jdk 1.8.0_60 dans android studio 2.1.3 – Nilabja

+0

désolé vérifier ma réponse éditée ... a oublié que Android stupide maintenant prend en charge lambdas mais pas le temps api ... – Kushan