2009-04-13 9 views
15

Suppongo che Java abbia un modo integrato per farlo.Come determinare la data un giorno prima di una determinata data in Java?

Data una data, come posso determinare la data un giorno prima di tale data?

Ad esempio, si supponga di ricevere il 3/1/2009. La data precedente è il 28/02/2009. Se avessi ricevuto il 3/1/2008, la data precedente sarebbe stata il 29/2/2008.

+0

Il sopra/sotto sul numero di risposte che suggeriscono Joda Time è 3.5. Prenderò il controllo. –

+3

sleep (-86400); Date.getDate()? :-) – Tanktalus

+0

@mmyers: avevo guardato Joda Time, ma pensavo che sicuramente la libreria di Java potesse gestire questo semplice compito da solo. Forse no ... –

risposta

45

Utilizzare l'interfaccia Calendario.

Calendar cal = Calendar.getInstance(); 
cal.setTime(myDate); 
cal.add(Calendar.DAY_OF_YEAR,-1); 
Date oneDayBefore= cal.getTime(); 

Fare "aggiunta" in questo modo garantisce di ottenere una data valida. Ciò è valido anche per il primo dell'anno, ad es. se myDate è il 1 ° gennaio 2012, oneDayBefore sarà il 31 dicembre 2011.

+0

Esattamente quello che stavo cercando. Grazie! –

+1

Funzionerà se la data è il 1 ° gennaio? – MountainX

+0

@MountainX - sì. – djechlin

0
import java.util.Calendar; 
import java.util.GregorianCalendar; 
import static java.util.Calendar.*; 


public class TestDayBefore { 

    public static void main(String... args) { 
     Calendar calendar = GregorianCalendar.getInstance(); 
     calendar.set(YEAR, 2009); 
     calendar.set(MONTH, MARCH); 
     calendar.set(DAY_OF_MONTH, 1); 
     System.out.println(calendar.getTime()); //prints Sun Mar 01 23:20:20 EET 2009 
     calendar.add(DAY_OF_MONTH, -1); 
     System.out.println(calendar.getTime()); //prints Sat Feb 28 23:21:01 EET 2009 

    } 
} 
7

È inoltre possibile utilizzare Joda-Time, una buona libreria Java per manipolare date:

DateTime result = dt.minusDays(1); 
1

Con la libreria date4j:

DateTime yesterday = today.minusDays(1); 
1

Questo sarebbe di aiuto.

getPreviousDateForGivenDate("2015-01-19", 10); 
getPreviousDateForGivenDate("2015-01-19", -10); 

public static String getPreviousDateForGivenDate(String givenDate, int datesPriorOrAfter) { 
    String saleDate = getPreviousDate(datesPriorOrAfter); 

    try { 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
     String[] arr = givenDate.split("-", 3); 
     Calendar cal = new GregorianCalendar(Integer.parseInt(arr[0]), Integer.parseInt(arr[1])-1, Integer.parseInt(arr[2])); 
     cal.add(Calendar.DAY_OF_YEAR, datesPriorOrAfter);  
     saleDate = dateFormat.format(cal.getTime()); 

    } catch (Exception e) { 
     System.out.println("Error at getPreviousDateForGivenDate():"+e.getMessage()); 
    } 

    return saleDate; 
} 
Problemi correlati