J'essaie de comparer une date au format String à la date actuelle. C'est ainsi que je l'ai fait (je n'ai pas testé, mais cela devrait fonctionner), mais j'utilise des méthodes obsolètes. Une bonne suggestion pour une alternative? Merci.
PS Je déteste vraiment faire des trucs de Date en Java. Il y a tellement de façons de faire la même chose que vous ne savez vraiment pas laquelle est la bonne, d'où ma question ici.
String valid_until = "1/1/1990";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
int year = strDate.getYear(); // this is deprecated
int month = strDate.getMonth() // this is deprecated
int day = strDate.getDay(); // this is deprecated
Calendar validDate = Calendar.getInstance();
validDate.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
if (currentDate.after(validDate)) {
catalog_outdated = 1;
}
Calendar
,SimpleDateFormat
,Date
ou l' un des autre date Java dépassée depuis longtemps et les classes temps. Utilisez plutôtjava.time
l'API de date et d'heure Java moderne . Oui, vous pouvez l'utiliser sur Android. Pour les anciens Android, consultez Comment utiliser ThreeTenABP dans Android Project .Réponses:
Votre code pourrait être réduit à
ou
la source
Vous pouvez utiliser compareTo ()
la source
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont maintenant héritage, supplanté par les java.time classes. La plupart des fonctionnalités java.time sont rétroportées vers Java 6 et Java 7 dans le projet ThreeTen-Backport . Adapté davantage pour Android antérieur (<26) dans ThreeTenABP . Voir Comment utiliser ThreeTenABP… .Vous pouvez directement créer un à
Calendar
partir d'unDate
:la source
Notez que le bon format est ("jj / MM / aaaa") avant que le code ne fonctionne. "mm" signifie minuts!
la source
la source
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont maintenant héritage, supplanté par les java.time classes. La plupart des fonctionnalités java.time sont rétroportées vers Java 6 et Java 7 dans le projet ThreeTen-Backport . Adapté davantage pour Android antérieur (<26) dans ThreeTenABP . Voir Comment utiliser ThreeTenABP… .il retourne vrai .. et vous pouvez également vérifier avant et égal à l'aide de date.be avant et date égal.
la source
Compare l'heure représentée par ce calendrier à celle représentée par le calendrier donné.
Renvoie 0 si les heures des deux calendriers sont égales, -1 si l'heure de ce calendrier est avant l'autre, 1 si l'heure de ce calendrier est après l'autre.
la source
convertissez la date en calendrier et effectuez vos calculs là-bas. :)
Ou:
la source
Il est temps pour la réponse moderne.
java.time et ThreeTenABP
Quand j'ai exécuté ce code tout à l'heure, le résultat était:
Comme il ne s'agit jamais de la même date dans tous les fuseaux horaires, attribuez un fuseau horaire explicite à
LocalDate.now
. Si vous souhaitez que le catalogue expire à la même heure dans tous les fuseaux horaires, vous pouvez donnerZoneOffset.UTC
tant que vous informez les utilisateurs que vous utilisez UTC.J'utilise java.time, l'API de date et d'heure Java moderne. Les classes date-heure que vous avez utilisé,
Calendar
,SimpleDateFormat
etDate
, sont tous mal conçus et heureusement dépassée depuis longtemps. De plus, malgré le nom, aDate
ne représente pas une date, mais un point dans le temps. Une conséquence de ceci est: même si nous sommes aujourd'hui le 15 février 2019, unDate
objet nouvellement créé est déjà après (donc pas égal à) unDate
objet de l'analyse15/02/2019
. Cela déroute certains. Contrairement à cela, le moderneLocalDate
est une date sans heure (et sans fuseau horaire), donc deuxLocalDate
s représentant la date du jour seront toujours égaux.Question: Puis-je utiliser java.time sur Android?
Oui, java.time fonctionne bien sur les appareils Android plus anciens et plus récents. Il nécessite juste au moins Java 6 .
org.threeten.bp
sous-packages.Liens
java.time
été décrit pour la première fois.java.time
vers Java 6 et 7 (ThreeTen pour JSR-310).la source
Tu pourrais essayer ça
et vous pouvez utiliser
today.getTime()
pour récupérer la valeur et comparer.la source
Parfois, nous devons faire une liste avec des dates, comme
aujourd'hui avec heure
hier avec hier
autres jours avec 23/06/2017
Pour ce faire, nous devons comparer l'heure actuelle avec nos données.
Vous pouvez également consulter cet exemple dans GitHub et cet article .
la source
Mise à jour: La bibliothèque Joda-Time est maintenant en mode maintenance et recommande de migrer vers le framework java.time qui lui succède. Voir la réponse d'Ole VV .
Joda-Time
Les classes java.util.Date et .Calendar sont notoirement gênantes. Évite-les. Utilisez Joda-Time ou le nouveau package java.time dans Java 8.
LocalDate
Si vous voulez une date uniquement sans heure du jour, utilisez la classe LocalDate.
Fuseau horaire
L'obtention de la date actuelle dépend du fuseau horaire. Une nouvelle date arrive à Paris avant Montréal. Spécifiez le fuseau horaire souhaité plutôt que de dépendre de la valeur par défaut de la JVM.
Exemple dans Joda-Time 2.3.
la source
Vous pouvez utiliser validDate.setTime (strDate) Jetez un œil au javadoc à l' adresse http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
la source
la source
Dans Kotlin, vous pouvez facilement comparer les dates avec les opérateurs de comparaison. Parce que Kotlin supporte déjà la surcharge des opérateurs. Donc pour comparer des objets de date:
et si vous utilisez des objets de calendrier, vous pouvez facilement comparer comme ceci:
la source