我正在使用仅支持一行表达式的报告工具
例如,我想得到昨天的日期
类Calendar有一个add方法,但它返回void
Calendar.getInstance().add(Calendar.DAY_OF_MONTH,-1).getTime()
无效
不知道如何完成这项工作
由于
答案 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
获取该内容,但我认为这是关于您希望切换到使用Joda
或Calendar
的时间...(亲爱的,请不要不要因为下面的可怕而投票给我......)
// 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
位置)。