9
votes

Comparez si deux dates sont dans la même semaine à Android

J'ai deux dates.gotez-les de quelque chose comme ...... xxx

et autre date est cassé en date2, mois2

maintenant Je veux voir si les deux sont dans la même semaine.

Il est possible grâce à beaucoup de calcul et logique.Problem survient lorsque la 1ère date est supposée 03 mars et 2e date est 28FEB. Les deux sont de la même semaine mais difficiles à comparer / à vérifier cela. Donc, je veux savoir s'il y a une fonction intégrée ou une autre façon de les comparer facilement.Veuillez facilement ..........


3 commentaires

"Dans la même semaine" et "dans une semaine" ne sont pas nécessairement la même chose. Par exemple, "Ce vendredi" est dans une semaine de "lundi prochain", mais ils ne sont pas la même semaine.


D'accord - Vous devez spécifier si vous souhaitez que votre fonction détermine si les dates sont comprises entre une semaine de l'autre (date de la date1 - date2 <7 jours) ou de la même semaine (lunedaire) (ou Sun - Sam). Le premier problème est un chèque facile, le deuxième suit la solution de SmartLemon ci-dessous.


Je voulais dire la même semaine. Cela signifie que si deux dates sont à l'intérieur du dimanche dernier au samedi prochain.


10 Réponses :


5
votes

Vous pouvez obtenir le numéro de semaine pour votre date à l'aide de c.get (calendar.week_of_year) et comparer les résultats pour vos deux dates.

Accédez également aux constantes via des variables d'instance ( C.Year ) n'est pas recommandée - accédez à eux à l'aide de classes ( calendrier.Year ).


1 commentaires

Mais vous voulez d'abord vérifier s'ils sont la même année, d'autres sages que vous pourriez comparer deux années différentes qui pourraient être légèrement différentes



14
votes

Utilisez quelque chose comme ceci:

Calendar c = Calendar.getInstance();
Integer year1 = c.get(c.YEAR);
Integer week1 = c.get(c.WEEK_OF_YEAR);

Calendar c = Calendar.getInstance();
c.setTimeInMillis(/*Second date in millis here*/);
Integer year2 = c.get(c.YEAR);
Integer week2 = c.get(c.WEEK_OF_YEAR);

if(year1 == year2) {
    if(week1 == week2) {
         //Do what you want here
    }
}


3 commentaires

Si ma date est de 31 décembre (mardi), le 1er janvier (mercredi) n'est pas considéré comme la même semaine par la logique ci-dessus.


Il suffit de vous faire savoir si la date est aujourd'hui et que vous vérifiez demain, cela fonctionnera, car la semaine de l'année pour le moment est en réalité 1


Utilisez getweekyyear () au lieu de obtenez (C.Year) pour obtenir l'année que le numéro de la semaine appartient même à la semaine qui traverse le nouvel an. Devrait résoudre votre problème, @HARSHAL.



1
votes

C'est une solution Java. Contrôles de segment de code suivants Si deux dates sont dans la même semaine. Il couvre également les cas de bords, où la semaine commence dans une année civile (décembre) et se termine la prochaine année (janvier).

Note: code a une dépendance à la Joda -Time: xxx

cas de test: xxx


0 commentaires

3
votes

Il suffit de poster une solution légèrement modifiée basée sur @fabiancook et comme indiqué par @harshal Sa solution ne répond pas à deux dates de différentes années, mais dans la même semaine.

La modification consiste à définir le jour_of_week dans les deux dates de calendrier sur lundi ..... Dans ce cas, les deux dates seront définies au même jour même si elles sont différentes, puis nous pouvons les comparer. xxx


0 commentaires

0
votes
private int weeksBetween(Calendar startDate, Calendar endDate) {
    startDate.set(Calendar.HOUR_OF_DAY, 0);
    startDate.set(Calendar.MINUTE, 0);
    startDate.set(Calendar.SECOND, 0);
    int start = (int)TimeUnit.MILLISECONDS.toDays(
        startDate.getTimeInMillis())
        - startDate.get(Calendar.DAY_OF_WEEK);
    int end = (int)TimeUnit.MILLISECONDS.toDays(
        endDate.getTimeInMillis());
    return (end - start) / 7;
}
if this method returns 0 they are in the same weekif this method return 1 endDate is the week after startDateif this method returns -1 endDate is the week before startDateyou get the idea

0 commentaires

0
votes

Disons, une semaine commence un an et termine l'année prochaine et nous choisissons 2 dates de cette semaine afin qu'elles soient dans des années différentes. Ensuite, la réponse acceptée donne un mauvais résultat car il vérifie que les dates sont dans la la même année! .

Pour améliorer la solution, on pourrait obtenir une date correspondant à un jour (cela pourrait être lundi ) de sa semaine, puis vérifiez que les deux dates appartiennent au même jour. Cependant, avant de le faire, assurez-vous que les deux objets de calendrier sont dans le même fuseau horaire . Donc, définissez le fuseau horaire d'un à l'autre. En outre, la solution ci-dessous fonctionne pour chaque niveau API car il ne nécessite pas l'utilisation de GetWeekofweekYear () ou getweekYear () (ces travaux Avec API 24 et supérieur. xxx


0 commentaires

4
votes

Utilisez Java.Time

Vous pouvez l'obtenir les façons suivantes:

Java 8 + et API Android 26 + : directement disponible
Java 6 et 7 : Thraetenbp << BR> Android 25 et inférieur: Threetenabp

Il n'est pas recommandé d'utiliser Java. util.calendar et java.util.date plus "

Comment savoir si deux dates données sont dans le même calendrier Semaine?

à l'aide de la plaine Java.Time : xxx

vous pouvez faire qu'avec des valeurs simples int , aussi: xxx

au cas où vous devriez étendre ou utiliser le code hérité: xxx

la sortie du code suivant xxx

est donc xxx

dans mes paramètres régionaux.


5 commentaires

@ Olev.v. Très bon point, merci ... a ajouté le chèque et un exemple où cela aurait conduit à un faux positif autrement.


@dehaar Il n'est pas recommandé d'utiliser Java.Util.Calendar et Java.Util.Date plus. - Pourquoi exactement?


@AnatOLII Jetez un coup d'œil à Cet article technique par Oracle < / a>, il commence même par la question Pourquoi avons-nous besoin d'une nouvelle bibliothèque de date et d'heure? ...


@dehaar merci pour votre réponse! Je suggérerais de penser que le lien de réflexion à côté de la phrase sur calendrier et date .


@AnatoliiII Très bonne suggestion, merci ... J'ai fait que cette phrase elle-même pointe sur l'article.



0
votes

Cela donnera vrai si deux dates de la même semaine xxx


0 commentaires

0
votes

ici dans la bibliothèque de Joda, j'ai constaté que la semaine commence à partir du lundi, mais je voulais que la semaine commence à partir du dimanche, il suffit de simplement utiliser la fonction ci-dessous: xxx


0 commentaires

1
votes

J'ai fini par utiliser

date1.with(previousOrSame(MONDAY)).equals(date2.with(previousOrSame(MONDAY)))


0 commentaires