2010-03-24 12 views
4

Je souhaite ajouter des jours à une date pour obtenir une nouvelle date en Java. Comment y parvenir en utilisant la classe Calendar.Comment ajouter des jours à une date en Java

Calendar dom = new GregorianCalendar(d, m, y); 

est l'instance de ma date de fabrication et je veux atteindre à ce jour d'expiration en ajoutant quelques 100 jours la date et le stocker dans un doe variable, mais incapable de le faire.

Répondre

10

Utiliser Calendar#add(). Voici un exemple de coup d'envoi.

Calendar dom = Calendar.getInstance(); 
dom.clear(); 
dom.set(y, m, d); // Note: month is zero based! Subtract with 1 if needed. 
Calendar expire = (Calendar) dom.clone(); 
expire.add(Calendar.DATE, 100); 

Si vous voulez plus de flexibilité et moins de code verbeux, je vous recommande JodaTime bien.

DateTime dom = new DateTime(y, m, d, 0, 0, 0, 0); 
DateTime expire = dom.plusDays(100); 
+0

Merci une tonne. Mais quand j'essaie de créer une nouvelle instance de calenar avec une valeur ajoutée en tant que nouvelle date, elle ne la stocke pas dans une nouvelle instance. – terrific

+1

Vous ne devriez pas faire 'new GregorianCalendar (d, m, y)'. Suivez les mêmes étapes que ci-dessus. C'est la seule bonne façon. D'ailleurs, notez que vous devriez mettre 'y, m, d' dedans et pas' d, m, y'. Notez également que le mois est basé sur zéro. Janvier est 0, Février est 1, Mars est 2, etc. C'est un cauchemar, le 'Calendrier'. – BalusC

+0

Question rapide - Pourquoi recommandez-vous contre new GregorianCalendar (...)? – Everyone

0

java.time

Maintenant, des années plus tard, les anciennes classes java.util.Date/.Calendar sont supplantés par le nouveau paquet java.time en Java 8 et versions ultérieures.

Ces nouvelles classes incluent une classe LocalDate pour représenter une date uniquement sans heure ni fuseau horaire.

LocalDate localDate = LocalDate.of(2015 , 2 , 3) ; 
LocalDate later = localDate.plusDays(100); 

Le code ci-dessus a des dates. Si vous avez besoin de connaître le moment exact d'expiration, vous avez besoin de fuseaux horaires et de fuseaux horaires. Dans ce cas, utilisez la classe ZonedDateTime.

ZoneId zone = ZoneId.of("America/Montreal") ; 
ZonedDateTime zdt = later.atStartOfDay(zone) ; 
1
DateFormat formatter = null; 
    Date convertedDate = null; 
    formatter = new SimpleDateFormat("yyyy-MM-dd"); 
    try { 
     convertedDate = (Date) formatter.parse(pro.getDate().toString());//pro.getDate() is the date getting from database 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(convertedDate); 
    cal.add(Calendar.DATE, 7); 
     Date cvdate=cal.getTime(); 
    if (cvdate.after(new Date())){ 
//do Something if you show expire... 
} 
Questions connexes