web-dev-qa-db-fra.com

Android différence entre deux dates en secondes

J'ai essayé différentes méthodes sur le Web, mais je n'ai pas pu le faire fonctionner.

Cursor cursor = sqlite.myDataBase.rawQuery("SELECT StartDate, EndDate FROM Tracks Where Id="+'"'+trackId+'"',null);

SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = outputFormat.parse(cursor.getString(cursor.getColumnIndex("StartDate")));
Date endDate = outputFormat.parse(cursor.getString(cursor.getColumnIndex("EndDate")));

De cette façon, je reçois les deux dates au bon format. Maintenant, je veux trouver la différence entre EndDate et Startdate en quelques secondes.

Aucun conseil? Je vous remercie.

34
Alin

Vous pouvez transformer un objet date en un long (millisecondes depuis le 1er janvier 1970), puis utiliser TimeUnit pour obtenir le nombre de secondes:

long diffInMs = endDate.getTime() - startDate.getTime();

long diffInSec = TimeUnit.MILLISECONDS.toSeconds(diffInMs);

Edit: -Correction du nom de la variable diffInMs qui était écrite diffInM (i) s sur la deuxième ligne.

100
Cheryl Simon

essayez la méthode ci-dessous: -

    public String twoDatesBetweenTime(String oldtime)
    {
        // TODO Auto-generated method stub
        int day = 0;
        int hh = 0;
        int mm = 0;
        try
        {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date oldDate = dateFormat.parse(oldtime);
            Date cDate = new Date();
            Long timeDiff = cDate.getTime() - oldDate.getTime();
            day = (int) TimeUnit.MILLISECONDS.toDays(timeDiff);
            hh = (int) (TimeUnit.MILLISECONDS.toHours(timeDiff) - TimeUnit.DAYS.toHours(day));
            mm = (int) (TimeUnit.MILLISECONDS.toMinutes(timeDiff) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(timeDiff)));
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }
        if(day==0)
        {
            return hh + " hour " + mm + " min";
        }
        else if(hh==0)
        {
            return mm + " min";
        }
        else
        {
            return day + " days " + hh + " hour " + mm + " min";
        }
    }
5
duggu

Complétant simplement cette réponse pour d'autres développeurs (comme moi) qui utilisent l'heure au lieu de la date.

Time t1 = new Time();
t1.setToNow();
Thread.sleep(1000);

Time t2 = new Time();
t2.setToNow();

diff = TimeUnit.MILLISECONDS.toSeconds(t2.toMillis(true)-t1.toMillis(true));
4
Igor Zelaya