Si realmente tiene que ser 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", por ejemplo "20100812" para hoy, lo analiza como 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 formato de fecha 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 en curso, se puede utilizar un truco similar:
Date firstday = new SimpleDateFormat("yyyyMMdd").parse(
new SimpleDateFormat("yyyyMM").format(new Date())+"01");
¿Ayer la fecha en qué formato? Como un objeto de calendario? Como una cadena? Como un util.Date? Como sql.Date? – Stephen