Java - 如何获取该月的最后一天

时间:2016-08-29 10:26:46

标签: java

是否有可能获得本月最后一周的最后一天。

例如,我希望在8月份的第5周的最后一天获得第31天,在9月份的第1周的最后一天获得第3天。

修改

我以本周为例。本周有2个月,因此我需要每周生成2份不同的每周报告。首次报告将于8月28日至31日举行,第二份报告将于9月1日至3日举行。周从星期日开始

2 个答案:

答案 0 :(得分:2)

编辑:在您的评论中澄清后,这是一个解决方案。给定一个月它会返回一个包含一个或两个日期的列表:如果月份在星期六结束,则为一个日期,因此整整一周;如果没有,则在该月的最后一天和随后的星期六结束。

public static final int lastDayOfWeek = Calendar.SATURDAY;

/** month is 1 through 12 for Jan through Dec */
public static List<Date> lastDayOfLastWeek(int year, int month) {
    Calendar cal = Calendar.getInstance();
    // set to a day in the month in question; Calendar’s month is 0-based, so subtract 1
    cal.set(year, month - 1, 1);
    // set to last day of month
    cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    List<Date> result = new ArrayList<Date>(2);
    result.add(cal.getTime());
    // is this also the last day of the week?
    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
    if (dayOfWeek != lastDayOfWeek) { // no
        // set to last day of week and add one more date to result
        cal.add(Calendar.DAY_OF_WEEK, lastDayOfWeek - dayOfWeek);
        result.add(cal.getTime());
    }
    return result;
}

例如,2016年4月它将于4月30日星期六返回。对于8月份,它将返回8月31日星期三和9月3日星期六,因为这些是两个期间结束的日期,您需要为其构建报告。

答案 1 :(得分:0)

简单的逻辑可以如下。 1.尝试计算当月最后一天发生的日期。 (例如说8月的最后一天是星期二)。 2.现在添加星期几的天数(一周的最后一天)。 (比如加5来使它成为星期日)

瞧.... 5是你的答案。

通过将星期一= 1,星期二= 2等等使其动态化.... 希望这个逻辑有用,如果您发现了除此之外的任何内容,请发布您的其他调查结果。