在 Java 中获取某个日期的上周日期范围Java 8/11 版本

2022-09-03 08:25:19

假设我有一个日期 2013 年 6 月 20 日

我如何获得上周的日期范围,即在这种情况下是6月9日至6月15日。

如果日期是2013年6月2日

范围应为5月26日至6月1日


答案 1

这是基于Java日历的解决方案

    Date date = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    int i = c.get(Calendar.DAY_OF_WEEK) - c.getFirstDayOfWeek();
    c.add(Calendar.DATE, -i - 7);
    Date start = c.getTime();
    c.add(Calendar.DATE, 6);
    Date end = c.getTime();
    System.out.println(start + " - " + end);

输出

Mon Jun 10 13:22:01 EEST 2013 - Sun Jun 16 13:22:01 EEST 2013

它是本地化的,在我的区域设置周从星期一开始


答案 2

Java 8/11 版本

final ZonedDateTime input = ZonedDateTime.now();
System.out.println(input);
final ZonedDateTime startOfLastWeek = input.minusWeeks(1).with(DayOfWeek.MONDAY);
System.out.println(startOfLastWeek);
final ZonedDateTime endOfLastWeek = startOfLastWeek.plusDays(6);
System.out.println(endOfLastWeek);