只有一个表达式来获取昨天的日期和月的第一天

时间:2010-08-12 12:57:45

标签: java date

我正在使用仅支持一行表达式的报告工具

例如,我想得到昨天的日期

类Calendar有一个add方法,但它返回void

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

无效

不知道如何完成这项工作

由于

6 个答案:

答案 0 :(得分:4)

使用Joda-Time

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

答案 1 :(得分:2)

你不能做像

这样的事情
new Date( new Date().getTime() - 86400000 );

获取当前时间,减去一天中的毫秒数,并从中构建一个新的日期对象?

答案 2 :(得分:2)

如果真的必须是单行,并且如果代码可以理解并不重要,我认为以下陈述应该有效:

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

它将当前日期格式化为“yyyyMMdd”,例如今天“20100812”,将其解析为int:20100812,减去一个:20100811,然后使用之前的格式解析日期“20100811”。如果今天是一个月的第一天,它也会起作用,因为一个月的0号被宽松的DateFormat解析为上个月的最后一天。

格式“yyyyDDD”也应该起作用(D是一年中的某一天)。

对于本月的第一天,您可以使用类似的技巧:

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

答案 3 :(得分:1)

假设你想要一个java.util.Date对象(因为你在问题中使用getTime()并返回java.util.Date),你可以这样做:

// 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);
哎呀,之前没有看到你月份的第一天查询。我想出了以下内容以使用util.Date获取该内容,但我认为这是关于您希望切换到使用JodaCalendar的时间...(亲爱的,请不要不要因为下面的可怕而投票给我......)

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

答案 4 :(得分:0)

这应该按如下方式完成:

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

当你这样做时:

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

您实际上是在问一个返回void的方法(add())来运行.getTime()。那不行。

答案 5 :(得分:0)

这是我在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"

我更喜欢使用ISO格式YYYY-MM-DD,因为它在任何地方都被识别,并避免区域格式混淆(日期字段上的dd/mm位置)。