2013-05-06 10 views
39

Come ridurre di un mese dalla data corrente e vogliono dolorante in java.util.Date variabile im utilizzando questo codice ma è mostra errore nella 2a lineaCome ridurre un mese dalla data corrente e memorizzato nella variabile data usando java?

java.util.Date da = new Date(); 
da.add(Calendar.MONTH, -1); //error 

Come conservare questa data in java.util.Date variabile?

+0

Usa "Calendario" classe – anstarovoyt

+1

Vai a questa [risposta] (http://stackoverflow.com/questions/1311143/java-util-date-deleting-three-months-from-a- data) – Amarnath

+0

ya ho usato quella classe .. – karthi

risposta

73

Utilizzare il Calendario:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, -1); 
Date result = cal.getTime(); 
+0

cal.getTime() restituirà un oggetto Date –

7
Calendar calNow = Calendar.getInstance() 

// adding -1 month 
calNow.add(Calendar.MONTH, -1); 

// fetching updated time 
Date dateBeforeAMonth = calNow.getTime(); 
+0

come memorizzare questa data nella variabile data – karthi

+1

@karthi 'Date dateValue = calNow.getTime();' .... – MadProgrammer

4

è possibile utilizzare Calendar

java.util.Date da = new Date(); 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(da); 
    cal.add(Calendar.MONTH, -1); 
    da = cal.getTime(); 
+1

(presumo l'uso di ' setTime' è a scopo dimostrativo dato che 'Calendar.getInstance' restituirà un' Calendar' impostato sulla data/ora corrente ... potreste anche voler inserire 'da = cal.getTime()' solo così che finite con un valore 'Date' alla fine ...) – MadProgrammer

+0

Sì, hai ragione! Grazie. – Ahiel

5

Utilizzando JodaTime:

Date date = new DateTime().minusMonths(1).toDate(); 

JodaTime offre una vantaggiosa API per la data manip ulation.

Si noti che l'API Date simile verrà introdotta in JDK8 con lo JSR310.

+0

metodo deprecato. –

3

A partire da Java 8, il metodo suggerito è utilizzare Date-Time API anziché Calendar.

Se si desidera un oggetto Date da restituire:

Date date = Date.from(ZonedDateTime.now().minusMonths(1).toInstant()); 

Se non avete bisogno di esattamente un oggetto Date, è possibile utilizzare le classi direttamente, forniti dal pacchetto, anche per ottenere le date in altri fusi orari:

ZonedDateTime dateInUTC = ZonedDateTime.now(ZoneId.of("Pacific/Auckland")).minusMonths(1); 
+0

Suggerisco di cambiare questa risposta per mostrare un particolare fuso orario, come "ZoneId.of (" Pacific/Auckland ")' piuttosto che 'ZoneOffset.UTC'. Se qualcuno volesse davvero UTC, allora sarebbe più appropriato usare 'OffsetDateTime' di' ZonedDateTime'. –

+0

Buon punto, aggiornato :) – DVarga