11
votes

Comment trouver le nombre de jours entre deux dates de Java ou Groovy?

J'ai une méthode qui utilise la logique suivante pour calculer la différence entre les jours. xxx

mais je veux pour EX, 9 févr. 2011 au 19 févr. 2011 devrait revenir moi 11 jours indépendamment de la contrepartie de second ou de millisecondes. Comment puis-je atteindre cela?


1 commentaires

Tous les jours n'ont pas 24 heures, c'est à votre demande, qu'il s'agisse d'une approximation appropriée.


9 Réponses :


0
votes

Just Payse 9 févr. 2011 & 19 févr. 2011 dans les dates en utilisant SIMPLEDATEFORMAT et le converti en Millis de démarrage et d'application et appliquez votre calcul


0 commentaires

2
votes
  GregorianCalendar cal1 = new GregorianCalendar(2011,2,9); 
  GregorianCalendar cal2 = new GregorianCalendar(2011,2,19); 
  long ms1 = cal1.getTime().getTime(); 
  long ms2 = cal2.getTime().getTime(); 
  long difMs = ms2-ms1; 
  long msPerDay = 1000*60*60*24; 

  double days = difMs / msPerDay;

0 commentaires

0
votes

Cela suppose des heures dans UTC ou GMT.

long day1 = milliseconds1/ (24 * 60 * 60 * 1000);
long day2 = milliseconds2/ (24 * 60 * 60 * 1000);
// the difference plus one to be inclusive of all days
long intervalDays = day2 - day1 + 1; 


2 commentaires

Entre le 9 février 2011 et le 9 février 2011, la différence devrait être le 1 9 février 2011 de 09h00 au 19 février 14:00 devrait me donner 11 jours.


Cette méthode donnera 11 jours quel que soit le temps. Il donnera même 11 pour 9 févr. 2011 23:00 et 19 févr. 2011 01:00



0
votes

Essayez ceci:

DateFormat format = DateFormat.getDateTimeInstance();
    Date completeDate=null;
    Date postedDate=null;

    try
    {
        completeDate = format.parse("18-May-09 11:30:57");
        postedDate = format.parse("11-May-09 10:46:37");
        long res = completeDate.getTime() - postedDate.getTime();

        System.out.println("postedDate: " + postedDate);
        System.out.println("completeDate: " + completeDate);
        System.out.println("result: " + res + '\n' + "minutes: " + (double) res /  (60*1000) + '\n' 
            + "hours: " + (double) res /  (60*60*1000) + '\n' + "days: " + (double) res /  (24*60*60*1000));
    }
    catch (ParseException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


0 commentaires

34
votes

Pour la solution groovy, vous avez demandé que vous devriez envisager d'utiliser:

class Example {

    public static void main(String[] args) {
        def lastWeek = new Date() - 7;
        def today = new Date()

        println daysBetween(lastWeek, today)
    }

    static def daysBetween(def startDate, def endDate) {
        use(groovy.time.TimeCategory) {
            def duration = endDate - startDate
            return duration.days
        }
    }
}


3 commentaires

Bonjour merci pour votre réponse .. Je n'ai pas compris cela .. Comment peut-on faire cela comme une fonction où je passerai à deux objets de date et cela devrait me renvoyer une différence entre les jours?


Je vous ai ajouté un exemple pour la fonction, veuillez envisager l'amélioration de votre Daybetween () avec le avant () chèque.


Selon la réponse ci-dessous, pour ce problème spécifique et une solution groovy, vous n'avez pas besoin d'utiliser Timecategory, Date1 - Date2 est suffisant.



12
votes

C'est une ligne bien usée, mais pour les dates, utilisez Jodatime .

Voici comment comment Calculer les intervalles de date à l'aide de Jodatime. P>

Days days = Days.daysBetween(new DateTime(millis1), new DateTime(millis2));
int daysBetweenDates = days.getDays();


1 commentaires

Depuis Java 8, vous pouvez également utiliser l'API de l'heure de la JDK. Voir docs.oracle.com /javase/8/docs/api/index.html?java/time/... . Dans votre cas, vous pouvez éventuellement utiliser période.between (date1, date2)



0
votes
def sdf = new java.text.SimpleDateFormat("yyyy.MM.dd")

sdf.lenient = false

Date date = sdf.parse("2015.10.02")

println date.calculateDays() 

println date.calculateDays(sdf.parse("2015.11.02"))

0 commentaires

1
votes

dans Groovy Tout ce dont vous avez besoin est:

int daysBetween(date1, date2) {
    Math.abs(date2 - date1)
}


1 commentaires

date2 - date1 est tellement groovy



0
votes

Découvrez le nombre de jours entre deux dates données:

@Test

public class Demo3 {

    public static void main(String[] args) {
        String dateStr ="2008-1-1 1:21:28";
        String dateStr2 = "2010-1-2 1:21:28";
        SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
        SimpleDateFormat format2 = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
        try {
            Date date2 = format.parse(dateStr2);
            Date date = format.parse(dateStr);

            System.out.println("distance is :"+differentDaysByMillisecond(date,date2));
        }catch(ParseException e ){
            e.printStackTrace();
        }
    }

//get Days method

    private static int differentDaysByMillisecond(Date date, Date date2) {
        return (int)((date2.getTime()-date.getTime())/1000/60/60/24);
    }

}


0 commentaires