J'ai écrit une méthode pour obtenir la date actuelle au format yyyy-MM-dd
et je veux pouvoir créer une autre méthode pour obtenir la date d'hier, le jour précédant la date actuelle. Tout ce dont vous avez besoin est la date et non l’horodatage. Je n'essaie pas d'utiliser Calendar
également. J'ai configuré la date du jour de cette façon:
public class DateWithNoTimestamp
{
private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";
public final static String getCurrentDate()
{
DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
Date date = new Date();
return dateFormat.format(date);
}
}
Cela fonctionne pour obtenir la date actuelle, maintenant la méthode distincte getYesertdayDate()
avec laquelle j'ai des problèmes. Comment puis-je le configurer de la même manière que je l’ai fait avec getCurrentDate()
en soustrayant un jour?
Vous pouvez simplement soustraire 1000 * 60 * 60 * 24
millisecondes de la date et formater cette valeur:
Date yesterday = new Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L));
C'est la méthode rapide et sale, et, comme indiqué dans les commentaires, cela peut casser lors des transitions de l'heure d'été (deux jours par an). Les alternatives recommandées sont les API de calendrier , les API Joda ou la nouvelle API de temps JDK 8:
LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
J'ai trouvé que org.Apache.commons.lang3.time.DateUtils
est plus intuitif et facile à utiliser.
Pour votre question
Date date = DateUtils.addDays(new Date(), -1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
fera l'affaire. Et cela fonctionne bien aussi dans JDK7 ou inférieur.
Avec Java 8 et les versions ultérieures, utilisez Java.time.LocalDate
class:
LocalDate yesterday = LocalDate.now().minusDays(1L);
Vous pouvez créer un objet Date () pour "hier":
private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";
public final static String format(Date date) {
DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
return dateFormat.format(date);
}
public final static String formatToday() {
return format(new Date());
}
public final static String formatYesterday() {
return format(new Date(new Date().getTime() - 24*3600*1000));
}
S'il vous plaît essayez ceci pour obtenir la date d'hier:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
long yourDateMillis = System.currentTimeMillis()- (24 * 60 * 60 * 1000);
Time yourDate = new Time();
yourDate.set(yourDateMillis);
String formattedDate = yourDate.format("%d-%m-%Y");
txtViewYesterday.setText(formattedDate);}
Essaye ça:
public class DateWithNoTimestamp
{
private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";
public final static String getCurrentDate()
{
DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
Date date = new Date();
date .setTime(date.getTime()-24*60*60*1000); // Subtract 24*60*60*1000 milliseconds
return dateFormat.format(date);
}
}