J'essaie de comparer une date au format String à la date du jour. Voici comment je l'ai fait (je n'ai pas encore testé, mais cela devrait fonctionner), mais j'utilise des méthodes obsolètes. Une bonne suggestion pour une alternative? Merci.
P.S. Je déteste vraiment faire des choses Date en Java. Il y a tellement de façons de faire la même chose que vous ne savez pas vraiment laquelle est la bonne, d'où ma question.
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;
}
Votre code pourrait être réduit à
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(valid_until);
if (new Date().after(strDate)) {
catalog_outdated = 1;
}
ou
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(valid_until);
if (System.currentTimeMillis() > strDate.getTime()) {
catalog_outdated = 1;
}
Vous pouvez utiliser compareTo ()
La méthode CompareTo doit renvoyer un nombre négatif si l'objet actuel est inférieur à autre objet, nombre positif si l’objet en cours est supérieur à autre objet et zéro si les deux objets sont égaux.
// Get Current Date Time
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm aa");
String getCurrentDateTime = sdf.format(c.getTime());
String getMyTime="05/19/2016 09:45 PM ";
Log.d("getCurrentDateTime",getCurrentDateTime);
// getCurrentDateTime: 05/23/2016 18:49 PM
if (getCurrentDateTime.compareTo(getMyTime) < 0)
{
}
else
{
Log.d("Return","getMyTime older than getCurrentDateTime ");
}
Notez que le bon format est ("jj/mm/aaaa") avant que le code ne fonctionne. "mm" signifie minutes!
String valid_until = "01/07/2013";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = null;
try {
strDate = sdf.parse(valid_until);
} catch (ParseException e) {
e.printStackTrace();
}
if (new Date().after(strDate)) {
catalog_outdated = 1;
}
Vous pouvez créer directement une Calendar
à partir d'une Date
:
Calendar validDate = new GregorianCalendar();
validDate.setTime(strDate);
if (Calendar.getInstance().after(validDate)) {
catalog_outdated = 1;
}
Calendar toDayCalendar = Calendar.getInstance();
Date date1 = toDayCalendar.getTime();
Calendar tomorrowCalendar = Calendar.getInstance();
tomorrowCalendar.add(Calendar.DAY_OF_MONTH,1);
Date date2 = tomorrowCalendar.getTime();
// date1 is a present date and date2 is tomorrow date
if ( date1.compareTo(date2) < 0 ) {
// 0 comes when two date are same,
// 1 comes when date1 is higher then date2
// -1 comes when date1 is lower then date2
}
String date = "03/26/2012 11:00:00";
String dateafter = "03/26/2012 11:59:00";
SimpleDateFormat dateFormat = new SimpleDateFormat(
"MM/dd/yyyy hh:mm:ss");
Date convertedDate = new Date();
Date convertedDate2 = new Date();
try {
convertedDate = dateFormat.parse(date);
convertedDate2 = dateFormat.parse(dateafter);
if (convertedDate2.after(convertedDate)) {
txtView.setText("true");
} else {
txtView.setText("false");
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
il retourne vrai ... et vous pouvez également vérifier avant et égal à l'aide de date.before et date.equal.
try {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String str1 = "9/10/2015";
Date date1 = formatter.parse(str1);
String str2 = "10/10/2015";
Date date2 = formatter.parse(str2);
if (date1.compareTo(date2) < 0) {
System.out.println("date2 is Greater than my date1");
}
} catch (ParseException e1) {
e1.printStackTrace();
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",Locale.getDefault());
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
Date date1 = dateFormat.parse("2013-01-01");
Date date2 = dateFormat.parse("2013-01-02");
calendar1.setTime(date1);
calendar2.setTime(date2);
System.out.println("Compare Result : " + calendar2.compareTo(calendar1));
System.out.println("Compare Result : " + calendar1.compareTo(calendar2));
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 antérieure à l'autre, 1 si l'heure de ce calendrier est postérieure à l'autre.
Parfois, nous devons faire une liste avec des dates, comme
aujourd'hui avec heure
hier avec hier
les autres jours du 23/06/2017
Pour ce faire, nous devons comparer l'heure actuelle à nos données.
Public class DateUtil {
Public static int getDateDayOfMonth (Date date) {
Calendar calendar = Calendar.getInstance ();
Calendar.setTime (date);
Return calendar.get (Calendar.DAY_OF_MONTH);
}
Public static int getCurrentDayOfMonth () {
Calendar calendar = Calendar.getInstance ();
Return calendar.get (Calendar.DAY_OF_MONTH);
}
Public static String convertMillisSecondsToHourString (long millisSecond) {
Date date = new Date (millisSecond);
Format formatter = new SimpleDateFormat ("HH: mm");
Return formatter.format (date);
}
Public static String convertMillisSecondsToDateString (long millisSecond) {
Date date = new Date (millisSecond);
Format formatter = new SimpleDateFormat ("dd / MM / yyyy");
Return formatter.format (date);
}
Public static long convertToMillisSecond (Date date) {
Return date.getTime ();
}
Public static String compare (String stringData, String yesterday) {
String result = "";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd HH: mm: ss");
Date date = null;
Try {
Date = simpleDateFormat.parse (stringData);
} Catch (ParseException e) {
E.printStackTrace ();
}
Long millisSecond = convertToMillisSecond (date);
Long currencyMillisSecond = System.currentTimeMillis ();
If (currencyMillisSecond> millisSecond) {
Long diff = currencyMillisSecond - millisSecond;
Long day = 86400000L;
If (diff <day && getCurrentDayOfMonth () == getDateDayOfMonth (date)) {
Result = convertMillisSecondsToHourString (millisSecond);
} Else if (diff <(day * 2) && getCurrentDayOfMonth () -1 == getDateDayOfMonth (date)) {
Result = yesterday;
} Else {
Result = convertMillisSecondsToDateString (millisSecond);
}
}
Return result;
}
}
Vous pouvez aussi consulter cet exemple dans GitHub et this post .
convertissez la date en calendrier et effectuez vos calculs ici. :)
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.geT(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH); //same as cal.get(Calendar.DATE)
Ou:
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
if (strDate.after(new Date()) {
catalog_outdated = 1;
}
Tu pourrais essayer ça
Calendar today = Calendar.getInstance ();
today.add(Calendar.DAY_OF_YEAR, 0);
today.set(Calendar.HOUR_OF_DAY, hrs);
today.set(Calendar.MINUTE, mins );
today.set(Calendar.SECOND, 0);
et vous pouvez utiliser today.getTime()
pour récupérer une valeur et comparer.
Temps pour la réponse moderne.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
String validUntil = "1/1/1990";
LocalDate validDate = LocalDate.parse(validUntil, dateFormatter);
LocalDate currentDate = LocalDate.now(ZoneId.of("Pacific/Efate"));
if (currentDate.isAfter(validDate)) {
System.out.println("Catalog is outdated");
}
Lorsque j'ai exécuté ce code tout à l'heure, le résultat était:
Le catalogue est obsolète
Etant donné que ce n'est jamais la même date dans tous les fuseaux horaires, donnez le fuseau horaire explicite à LocalDate.now
. Si vous souhaitez que le catalogue expire au même moment dans tous les fuseaux horaires, vous pouvez donner ZoneOffset.UTC
tant que vous informez les utilisateurs que vous utilisez UTC.
J'utilise Java.time, l'API Java moderne pour la date et l'heure. Les classes date-heure que vous avez utilisées, Calendar
, SimpleDateFormat
et Date
, sont toutes mal conçues et heureusement obsolètes. Aussi, malgré le nom, Date
ne représente pas une date, mais un moment précis. L'une des conséquences est que, même si nous sommes le 15 février 2019, un objet Date
nouvellement créé est déjà après (donc différent de) un objet Date
de l'analyse 15/02/2019
. Cela confond certains. Contrairement à cela, la variable LocalDate
moderne est une date sans heure (et sans fuseau horaire), de sorte que deux LocalDate
représentant la date d’aujourd’hui seront toujours égaux.
Oui, Java.time fonctionne bien sur les appareils Android anciens et récents. Cela nécessite juste au moins Java 6.
org.threeten.bp
avec des sous-packages.Java.time
a été décrit pour la première fois.Java.time
vers Java 6 et 7 (ThreeTen pour JSR-310).Les classes Java.util.Date et .Calendar sont notoirement gênantes. Évite-les. Utilisez soit Joda-Time ou le nouveau package Java.time dans Java 8.
Si vous souhaitez une date uniquement sans heure, utilisez la classe LocalDate.
Obtenir 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 configuration par défaut de la machine virtuelle Java.
Exemple dans Joda-Time 2.3.
DateTimeFormat formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( "1/1/1990" );
boolean outdated = LocalDate.now( DateTimeZone.UTC ).isAfter( localDate );
Vous pouvez utiliser validDate.setTime (strDate) Consultez le javadoc à http://docs.Oracle.com/javase/1.5.0/docs/api/Java/util/Calendar .html