2013-02-18 25 views
24

Ho già tutto configurato per memorizzare la data corrente su una variabile in Java. Quello che sto cercando di capire è come memorizzare una data di 1 anno dopo la data corrente.negozio data e data corrente 1 anno dalla corrente in java

import java.util.Date; 
import java.text.SimpleDateFormat; 
import java.text.DateFormat; 
import java.util.Scanner; 
import java.util.Calendar; 

Ecco quello che ho per la data attuale:

DateFormat newDate = new SimpleDateFormat("MM/dd/yyyy"); 
Date date = new Date(); 
startDate = newDate.format(date); 

Quindi, se fosse oggi, per esempio sarebbe memorizzare 2013/02/18. Sto cercando di memorizzare la data 18/02/2014. Come potrei fare questo?

+0

Che dire di ... 29/02/2016? Che anno c'è? – Makoto

+1

possibile duplicato di [Aggiungi calendario anno a Java non funziona] (http://stackoverflow.com/questions/3883167/add-year-to-java-calendar-doesnt-work) –

risposta

68

Se non si vuole trascinare librerie esterne, basta usare calendar.add(Calendar.YEAR, 1)

Calendar cal = Calendar.getInstance(); 
Date today = cal.getTime(); 
cal.add(Calendar.YEAR, 1); // to get previous year add -1 
Date nextYear = cal.getTime(); 

nota, se la data era 29/Feb/2012 e si aggiunge 1 anno, si otterrà 28/Feb/2013

+1

grazie a @iTech che ha funzionato perfettamente – bardockyo

+1

grazie funziona bene –

5

Usa Calendar#add(int field, int amount) method.You dovrebbe utilizzare l'API di Calendar in ordine per manipolare le operazioni di data e ora.

Calendar today = Calendar.getInstance(); 
Calendar nextYearToday = today; 
nextYearToday.add(Calendar.YEAR, 1); 
-2

In Android è più semplice che mai:

oneYearAfterDate = new Date(date.getTime() + DateUtils.YEAR_IN_MILLIS)

3

tl; dr

LocalDate.parse( 
    "2/18/2013" , 
    DateTimeFormatter.ofPattern ("M/d/uuuu") 
).plusYears(1) 

dettagli

Il accepted Answer è corretto, ma obsoleto come di Java 8.

java.time

Il java.time framework integrato in Java 8 e versioni successive soppianta le classi fastidiosi vecchi java.util.Date/.Calendar. Le nuove classi sono ispirate al successo del framework Joda-Time, inteso come suo successore, simile nel concetto ma ri-architettato. Definito da JSR 310. Esteso dal progetto ThreeTen-Extra. Vedi lo Tutorial.

LocalDate

Queste nuove classi includono LocalDate, per rappresentare un valore di data-only senza tempo del giorno, né il fuso orario.

Per prima cosa dobbiamo analizzare l'input di stringa. Lo java.time formatter utilizza codici di pattern simili alle vecchie classi, ma non esattamente uguali. Quindi assicurati di leggere attentamente il nuovo documento.

imbottito Zero

notate che il vostro stringa di input manca zero cifre per alcuni valori. Ciò significa che è necessario utilizzare codici di pattern singoli, M e d anziché MM e dd. I codici doppi significano che il padding zero deve essere sempre incluso per valori a una cifra diversa, 02 anziché 2.

String input = "2/18/2013"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("M/d/uuuu"); 
LocalDate localDate = LocalDate.parse (input , formatter); 

Aggiungi un anno. Il framework java.time si prende cura dell'anno bisestile.

LocalDate yearLater = localDate.plusYears (1); 

Discarica per consolle.

System.out.println ("localDate: " + localDate + " and yearLater: " + yearLater); 

localDate: 2013/02/18 e yearLater: 2014-02-18

+0

Grazie. Un buon esempio di risposta tardiva che può ancora aggiungere un enorme valore. – HopeKing

0
Calendar cal = Calendar.getInstance(); 
     Date today = cal.getTime(); 
     cal.add(Calendar.YEAR, 1); // to get previous year add 1 
     cal.add(Calendar.DAY_OF_MONTH, -1); // to get previous day add -1 
     Date expiryDate = cal.getTime(); 


     System.out.println("today is --> "+today); 
     System.out.println("expiryDate is --> "+expiryDate); 

OutPut oggi è -> ven 1 dicembre 10:10:52 GMT + 05: 30 2017

expiryDate è -> ven 30 nov 10:10:52 GMT + 05: 30 2018

data di oggi è -> ven 1 dicembre 10:10:52 GMT + 05: 30 2017

expiryDate è -> Ven 30 Nov 10:10:52 GMT + 05: 30 2018

enter image description here

+0

FYI, le fastidiose classi 'Date' e' Calendar' ora sono legacy e dovrebbero essere evitate. Sono soppiantati dalle classi java.time integrate in Java 8 e Java 9. Per Java 6 e Java 7, vedere il progetto * ThreeTen-Backport *. –

+0

Si prega di aiutare come controllare la data di scadenza in Java 9. –

+0

Vedere [mia risposta] (https://stackoverflow.com/a/33967171/642706) per il codice java.time. –

Problemi correlati