2012-05-31 10 views

Respuesta

3

Uso JodaTime

DateMidnight now = new DateMidnight(); 
DateMidnight beginningOfLastMonth = now.minusMonths(1).withDayOfMonth(1); 
DateMidnight endOfLastMonth = now.withDayOfMonth(1).minusDays(1); 
System.out.println(beginningOfLastMonth); 
System.out.println(endOfLastMonth); 

Salida:

2012-04-01T00: 00: 00.000 + 02: 00
2012-04-30T00: 00: 00.000 + 02: 00

Explicación: un objeto DateMidnight es un objeto Date sin información de hora del día, que parece justo lo que necesita. De lo contrario, reemplace todas las ocurrencias de DateMidnight con DateTime en el código anterior.

+0

+1 y OP también quiere tener la última fecha del mes anterior –

+0

Las clases media noche y métodos sobre Joda-Time están en desuso. Use el método 'withTimeAtStartOfDay'. –

+1

Para su información, el proyecto [Joda-Time] (http://www.joda.org/joda-time/) está ahora en [modo de mantenimiento] (https://en.wikipedia.org/wiki/Maintenance_mode), con el equipo recomienda la migración a las clases [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). Consulte [Tutorial de Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –

2

bien podría crear un objeto de calendario, establecer la fecha para el primer día del mes actual (debería ser el primero: P) y luego puede hacer dos operaciones: de su objeto de calendario puede restar un período particular de tiempo, por ejemplo un mes (esto le daría la primera fecha del mes anterior, o un día, que le daría el último día del mes anterior. No lo intenté pero estos serían mis primeros pasos.

26

Con Calendar

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, -1); 
cal.set(Calendar.DATE, 1); 
Date firstDateOfPreviousMonth = cal.getTime(); 

cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE)); // changed calendar to cal 

Date lastDateOfPreviousMonth = cal.getTime(); 

Ver

+1

¿Por qué esta no es la respuesta aceptada? –

+0

¿Alguna vez necesitamos usar 'getActualMinimum'? ¿O simplemente supongamos que siempre será 1? – ADTC

+0

para Fecha en la que puede suponer que es 1 para el calendario gregoriano, pero también hay muchos otros campos, [mira esto] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk /openjdk/8u40-b25/java/util/GregorianCalendar.java#GregorianCalendar.0MIN_VALUES –

1

También me gustaría agregar algo a la respuesta de Jigar. Utilice la clase DateFormat para obtener la fecha en el formato especificado en la pregunta: ¿

DateFormat df = DateFormat.getInstance(DateFormat.SHORT); 
System.out.println(df.format(firstDateOfPreviousMonth)); 
System.out.println(df.format(lastDateOfPreviousMonth)); 

Salida:

04/01/12 
04/30/12 
+0

Gracias Sean .... –

+0

puede aceptar este. – Mdhar9e

5

tl; dr

YearMonth.now().minusMonths(1).atDay(1) 

... y ...

YearMonth.now().minusMonths(1).atEndOfMonth() 

Evita juDate

Evite las clases incluidas java.util.Date y .Calendar ya que son notoriamente problemáticas. En su lugar, use java.time package en Java 8 y versiones posteriores.

java.time

El nuevo java.time framework en Java 8 (Tutorial) tiene comandos para esto.

La clase YearMonth llamada con acierto representa un mes del año, sin ningún día o momento específico. Desde allí podemos solicitar el primer y último día del mes.

ZonedId zoneId = ZoneId.of("America/Montreal"); 
YearMonth yearMonthNow = YearMonth.now(zoneId); 
YearMonth yearMonthPrevious = yearMonthNow.minusMonths(1); 
LocalDate firstOfMonth = yearMonthPrevious.atDay(1); 
LocalDate lastOfMonth = yearMonthPrevious.atEndOfMonth(); 

Joda-Time

ACTUALIZACIÓN:Joda-Time El proyecto se encuentra ahora en maintenance mode, con el equipo de asesoramiento migración a los java.time clases. Ver .

En Joda-Time 2.8, utilice la clase LocalDate si no le importa la hora del día.

LocalDate today = LocalDate.now(DateTimeZone.forID("Europe/Paris")); 
LocalDate firstOfThisMonth = today.withDayOfMonth(1); 
LocalDate firstOfLastMonth = firstOfThisMonth.minusMonths(1); 
LocalDate endOfLastMonth = firstOfThisMonth.minusDays(1); 
+0

Vea mi [respuesta similar r] (http://stackoverflow.com/a/26321291/642706) para duplicar la pregunta y obtener más información sobre este tipo de código. –

0
Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.DATE, 1); 
    cal.add(Calendar.DAY_OF_MONTH, -1); 
    Date lastDateOfPreviousMonth = cal.getTime(); 
    cal.set(Calendar.DATE, 1); 
    Date firstDateOfPreviousMonth = cal.getTime(); 
Cuestiones relacionadas