web-dev-qa-db-fra.com

Comment obtenir la date d'hier sans utiliser Calendar en Java et sans horodatage, rien que la date?

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? 

13
wheelerlc64

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);
20
Giovanni Botta

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.

13
dyng

Avec Java 8 et les versions ultérieures, utilisez Java.time.LocalDate class:

LocalDate yesterday = LocalDate.now().minusDays(1L);
6
llappall

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));
}
2
Roberto

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);}
0
Mamun

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);
       } 
}
0
Codev