web-dev-qa-db-fra.com

Différence Android entre deux dates

J'ai deux rendez-vous comme:

String date_1="yyyyMMddHHmmss";
String date_2="yyyyMMddHHmmss";

Je veux imprimer la différence comme:

2d 3h 45m

Comment puis je faire ça? Merci!

36
D Ferra
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);
}

out out is is:  

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
126
Digvesh Patel

Cela fonctionne et convertit en chaîne en tant que bonus;)

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    try {
        //Dates to compare
        String CurrentDate=  "09/24/2015";
        String FinalDate=  "09/26/2015";

        Date date1;
        Date date2;

        SimpleDateFormat dates = new SimpleDateFormat("MM/dd/yyyy");

        //Setting dates
        date1 = dates.parse(CurrentDate);
        date2 = dates.parse(FinalDate);

        //Comparing dates
        long difference = Math.abs(date1.getTime() - date2.getTime());
        long differenceDates = difference / (24 * 60 * 60 * 1000);

        //Convert long to String
        String dayDifference = Long.toString(differenceDates);

        Log.e("HERE","HERE: " + dayDifference);

    } catch (Exception exception) {
        Log.e("DIDN'T WORK", "exception " + exception);
    }
}
9
TheVinceble
Date userDob = new SimpleDateFormat("yyyy-MM-dd").parse(dob);
Date today = new Date();
long diff =  today.getTime() - userDob.getTime();
int numOfDays = (int) (diff / (1000 * 60 * 60 * 24));
int hours = (int) (diff / (1000 * 60 * 60));
int minutes = (int) (diff / (1000 * 60));
int seconds = (int) (diff / (1000));
8
Nilesh Savaliya

Cela vous donnera la différence en mois 

long milliSeconds1 = calendar1.getTimeInMillis();
long milliSeconds2 = calendar2.getTimeInMillis();
long periodSeconds = (milliSeconds2 - milliSeconds1) / 1000;
long elapsedDays = periodSeconds / 60 / 60 / 24;

System.out.println(String.format("%d months", elapsedDays/30));
5
Swap-IOS-Android

Short & Sweet:

/**
 * Get a diff between two dates
 *
 * @param oldDate the old date
 * @param newDate the new date
 * @return the diff value, in the days
 */
public static long getDateDiff(SimpleDateFormat format, String oldDate, String newDate) {
    try {
        return TimeUnit.DAYS.convert(format.parse(newDate).getTime() - format.parse(oldDate).getTime(), TimeUnit.MILLISECONDS);
    } catch (Exception e) {
        e.printStackTrace();
        return 0;
    }
}

Utilisation:

int dateDifference = (int) getDateDiff(new SimpleDateFormat("dd/MM/yyyy"), "29/05/2017", "31/05/2017");
System.out.println("dateDifference: " + dateDifference);

Sortie:

dateDifference: 2
1
Meet

J'ai arrangé un peu. Cela fonctionne très bien.

@SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MM yyyy");
    Date date = new Date();
    String dateOfDay = simpleDateFormat.format(date);

    String timeofday = Android.text.format.DateFormat.format("HH:mm:ss", new Date().getTime()).toString();

    @SuppressLint("SimpleDateFormat") SimpleDateFormat dateFormat = new SimpleDateFormat("dd MM yyyy hh:mm:ss");
    try {
        Date date1 = dateFormat.parse(06 09 2018 + " " + 10:12:56);
        Date date2 = dateFormat.parse(dateOfDay + " " + timeofday);

        printDifference(date1, date2);

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

@SuppressLint("SetTextI18n")
private void printDifference(Date startDate, Date endDate) {
    //milliseconds
    long different = endDate.getTime() - startDate.getTime();

    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;

Toast.makeText(context, elapsedDays + " " + elapsedHours + " " + elapsedMinutes + " " + elapsedSeconds, Toast.LENGTH_SHORT).show();
}
1
Trk
DateTime start = new DateTime(2013, 10, 20, 5, 0, 0, Locale);
DateTime end = new DateTime(2013, 10, 21, 13, 0, 0, Locale);
Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays()

il retourne combien de jours entre deux dates données, où DateTime est issu de la bibliothèque joda

1

Vous pouvez calculer la différence de temps en millisecondes à l'aide de cette méthode et obtenir les sorties en secondes, minutes, heures, jours, mois et années.

Vous pouvez télécharger le cours ici: DateTimeDifference GitHub Link

  • Simple à utiliser
long currentTime = System.currentTimeMillis (); 
 long previousTime = (System.currentTimeMillis () - 864000000); // 10 jours auparavant 

 Log.d ("DateTime:", "Différence avec la seconde:" + AppUtility.DateTimeDifference (currentTime, previousTime, AppUtility.TimeDifference.SECOND)); "DateTime:", "Différence avec minute:" + AppUtility.DateTimeDifference (currentTime, previousTime, AppUtility.TimeDifference.MINUTE));
  • Vous pouvez comparer l'exemple ci-dessous
if (AppUtility.DateTimeDifference (heure actuelle, heure précédente, AppUtility.TimeDifference.MINUTE)> 100) {
 Log.d ("DateTime:", "Il y a plus de 100 minutes de différence entre deux dates."); 
} Else {
 Log.d ("DateTime:", "Il n'y a pas plus de 100 minutes de différence entre deux dates."); 
}.
1
A. Batuhan Özkaya

Voici la réponse moderne. C’est bon pour ceux qui utilisent Java 8 ou plus tard (ce qui n’est pas encore le cas pour la plupart des téléphones Android) ou qui sont satisfaits d’une bibliothèque externe.

    String date1 = "20170717141000";
    String date2 = "20170719175500";

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    Duration diff = Duration.between(LocalDateTime.parse(date1, formatter), 
                                     LocalDateTime.parse(date2, formatter));

    if (diff.isZero()) {
        System.out.println("0m");
    } else {
        long days = diff.toDays();
        if (days != 0) {
            System.out.print("" + days + "d ");
            diff = diff.minusDays(days);
        }
        long hours = diff.toHours();
        if (hours != 0) {
            System.out.print("" + hours + "h ");
            diff = diff.minusHours(hours);
        }
        long minutes = diff.toMinutes();
        if (minutes != 0) {
            System.out.print("" + minutes + "m ");
            diff = diff.minusMinutes(minutes);
        }
        long seconds = diff.getSeconds();
        if (seconds != 0) {
            System.out.print("" + seconds + "s ");
        }
        System.out.println();
    }

Cette imprime

2d 3h 45m 

A mon avis, l’avantage n’est pas tant qu’elle est plus courte (ce n’est pas beaucoup), mais laisser les calculs à une bibliothèque standard est moins sujet aux erreurs et donne un code plus clair. Ce sont de grands avantages. Le lecteur n'est pas chargé de reconnaître les constantes telles que 24, 60 et 1000 et de vérifier qu'elles sont utilisées correctement.

J'utilise l'API Java moderne Date & Time (décrite dans JSR-310 et également connue sous ce nom). Pour utiliser cela sur Android, procurez-vous ThreeTenABP, consultez cette question: Comment utiliser ThreeTenABP dans Android Project . Pour l'utiliser avec d'autres versions de Java 6 ou 7, obtenez ThreeTen Backport . Avec Java 8 et les versions ultérieures, il est intégré.

Avec Java 9, cela sera encore un peu plus facile puisque la classe Duration est étendue avec des méthodes pour vous donner séparément les parties jours, heures, minutes et secondes, afin que vous n’ayez pas besoin des soustractions. Voir un exemple dans ma réponse ici .

0
Ole V.V.

J'utilise ceci: Envoyer la date de début et de fin en millisecondes

public int GetDifference(long start,long end){
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(start);
    int hour = cal.get(Calendar.HOUR_OF_DAY);
    int min = cal.get(Calendar.MINUTE);
    long t=(23-hour)*3600000+(59-min)*60000;

    t=start+t;

    int diff=0;
    if(end>t){
        diff=(int)((end-t)/ TimeUnit.DAYS.toMillis(1))+1;
    }

    return  diff;
}
0
ahmad dehghan

Lorsque vous utilisez Date() pour calculer la différence d’heures, configurez la SimpleDateFormat() en UTC, sinon vous obtenez une erreur d’une heure en raison de l’activation de l’heure avancée.

0
user3812123

Vous pouvez généraliser cela en une fonction qui vous permet de choisir le format de sortie.

private String substractDates(Date date1, Date date2, SimpleDateFormat format) {
    long restDatesinMillis = date1.getTime()-date2.getTime();
    Date restdate = new Date(restDatesinMillis);

    return format.format(restdate);
}

Voici un appel de fonction simple comme celui-ci, différence d'heures, de minutes et de secondes:

SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {
    Date date1 = formater.parse(dateEnd);
    Date date2 = formater.parse(dateInit);

    String result = substractDates(date1, date2, new SimpleDateFormat("HH:mm:ss"));

    txtTime.setText(result);
} catch (ParseException e) {
    e.printStackTrace();
}
0
Exensor