Pregunta Solo una expresión para obtener la Fecha de ayer y el primer día del mes


Estoy usando herramientas de informes que solo admiten una expresión de línea

Por ejemplo quiero obtener la fecha de ayer

La clase Calendario tiene un método de agregar, pero devuelve void así que

Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime()

no funcionó

no sé cómo hacer esto

Gracias


5
2017-08-12 12:57


origen


Respuestas:


Si realmente tiene que ser de una sola línea y no importa si el código es comprensible, creo que la siguiente declaración debería funcionar:

Date yesterday = new SimpleDateFormat("yyyyMMdd").parse(
    ""+(Integer.parseInt(new SimpleDateFormat("yyyyMMdd").format(new Date()))-1));

Formatea la fecha actual como "aaaaMMdd", p. Ej. "20100812" para hoy, lo analiza como un int: 20100812, resta uno: 20100811 y luego analiza la fecha "20100811" utilizando el formato anterior. También funcionará si hoy es el primero de un mes, ya que el día 0 de un mes es analizado por un DateFormat indulgente como el último día del mes anterior.

El formato "yyyyDDD" debería funcionar también (D es el día del año).

Para el primer día del mes actual, puede utilizar un truco similar:

Date firstday = new SimpleDateFormat("yyyyMMdd").parse(
    new SimpleDateFormat("yyyyMM").format(new Date())+"01");

2
2017-08-12 16:15



Utilizar Joda-Time:

new org.joda.time.DateTime().minusDays(1).toDate();

4
2017-08-12 12:59



No puedes hacer algo como

new Date( new Date().getTime() - 86400000 );

para obtener la hora actual, restar el número de milisegundos en un día y crear un nuevo objeto de fecha a partir de eso?


2
2017-08-12 13:06



Suponiendo que quieres un java.util.Date objeto (desde que usaste getTime() en su pregunta y que devuelve una java.util.Date), Podrías hacerlo:

// Get yesterday's date. System.currentTimeMillis() returns the
// number of milliseconds between the epoch and today, and the
// 86400000 is the number of milliseconds in a day.
new Date(System.currentTimeMillis() - 86400000);

Vaya, no vi la consulta del primer día del mes anterior. Se me ocurrió lo siguiente para obtener ese uso util.Date, pero creo que este es el momento en que quieres cambiar a usar Joda o Calendar... (querido SO, por favor no me voten por la horrendoidad de lo siguiente ...)

// This will return the day of the week as an integer, 0 to 6.
new Date(System.currentTimeMillis() - ((new Date().getDate()-1) * 86400000)).getDay();

1
2017-08-12 13:08



Esto debe hacerse de la siguiente manera:

Calendar cal = Calendar.getInstance();
cal .add(Calendar.DAY_OF_MONTH,-1);
cal .getTime();

Cuando estás haciendo esto:

Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime()

Esencialmente estás pidiendo un método (add()) que devuelve void to run .getTime(). Eso no puede funcionar.


0
2018-02-09 18:59



Esto es lo que uso en JasperReports:

// Today
new java.util.Date().format('yyyy-MM-dd')
// Yesterday
new SimpleDateFormat("yyyy-MM-dd").format(new Date()-1)

// First Day of current month
new java.util.Date().format('yyyy') + "-" + new java.util.Date().format('MM') + "-01"

Prefiero usar el formato ISO YYYY-MM-DD Porque es reconocido en todas partes y evita la confusión de los formatos regionales (dd/mm posición en el campo de fecha).


0
2018-02-27 14:06