2

我想计算上个月的开始日期。我已经提到了这篇文章,并且我编写了如下代码片段:

Calendar calendar = getCalendar(new Date());
calendar.set(Calendar.DAY_OF_MONTH-1,
        calendar.getActualMinimum(DAY_OF_MONTH));
calendar = getTimeToBeginningOfDay(calendar);

return calendar.getTime();

有了这个,我可以在上个月结束之前获得 Date。帮助我获得任何帮助的开始日期将不胜感激。

4

3 回答 3

1

你可能会得到你所期望的:

Calendar c = Calendar.getInstance();

// substract one month
c.add(Calendar.MONTH, -1);

// get to the lowest day of that month
c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));

// lowest possible time in that day
c.set(Calendar.HOUR_OF_DAY, c.getActualMinimum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getActualMinimum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getActualMinimum(Calendar.SECOND));
于 2012-09-13T01:55:46.557 回答
1

您永远不应该对字段常量进行数学运算,例如Calendar.DAY_OF_MONTH. 你想做的是:

Calendar calendar = getCalendar(new Date());
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar = getTimeToBeginningOfDay(calendar);

return calendar.getTime();
于 2012-09-13T01:57:25.247 回答
1

如果您只想要上个月的第一天,那么应该这样做。

    Calendar instance = Calendar.getInstance();
    instance.add(Calendar.MONTH, -1);
    instance.set(Calendar.DAY_OF_MONTH, 1);

    System.out.println(instance.getTime());

如果您需要清除时间组件,则使用getTimeToBeginningOfDay()帖子中提到的来实现这一点。

于 2012-09-13T01:57:33.903 回答