2009-04-13 21 views
15

Supongo que Java tiene una forma incorporada de hacerlo.¿Cómo determinar la fecha un día antes de una fecha determinada en Java?

Dada una fecha, ¿cómo puedo determinar la fecha un día antes de esa fecha?

Por ejemplo, supongamos que me entregan el 1 de marzo de 2009. La fecha anterior es 2/28/2009. Si me hubieran dado el 1 de marzo de 2008, la fecha anterior habría sido 2/29/2008.

+0

El exceso/defecto en el número de respuestas que sugieren Joda Time es 3.5. Me haré cargo. –

+3

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

+0

@mmyers: Miré a Joda Time, pero pensé que seguramente la biblioteca de Java podría manejar esta simple tarea por sí misma. Tal vez no ... –

Respuesta

45

Utilice la interfaz de calendario.

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

Hacer "adición" de esta manera le garantiza que obtendrá una fecha válida. Esto también es válido para el 1 ° año del año, p. si myDate es el 1 de enero de 2012, oneDayBefore será el 31 de diciembre de 2011.

+0

Exactamente lo que estaba buscando. ¡Gracias! –

+1

¿Funcionará esto si la fecha es el 1 de enero? – 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

También puede utilizar Joda-Time, una muy buena biblioteca de Java para manipular fechas:

DateTime result = dt.minusDays(1); 
1

Con la biblioteca date4j:

DateTime yesterday = today.minusDays(1); 
1

Esto ayudaría.

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; 
} 
Cuestiones relacionadas