获取Java上日期的上周日期范围

Rya*_*tra 10 java datetime

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

如何获得上周的日期范围,即6月9日至6月15日.

如果日期是2013年6月2日

范围应该是6月26日至6月1日

Evg*_*eev 31

这是基于Java Calendar的解决方案

    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);
Run Code Online (Sandbox Code Playgroud)

产量

Mon Jun 10 13:22:01 EEST 2013 - Sun Jun 16 13:22:01 EEST 2013
Run Code Online (Sandbox Code Playgroud)

它本地化,在我的Locale周从星期一开始


fre*_*dev 10

Java 8版本

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);
Run Code Online (Sandbox Code Playgroud)


Mub*_*bin 5

您可以使用JodaTime更清洁的解决方案。有了JodaTime你可以做如下:

final DateTime input = new DateTime();
System.out.println(input);
final DateMidnight startOfLastWeek = 
           new DateMidnight(input.minusWeeks(1).withDayOfWeek(DateTimeConstants.MONDAY));
System.out.println(startOfLastWeek);
final DateMidnight endOfLastWeek = startOfLastWeek.plusDays(6);
System.out.println(endOfLastWeek);
Run Code Online (Sandbox Code Playgroud)