15

2013年6月20日の日付があるとします

先週の日付範囲、つまりこの場合は 6 月 9 日から 6 月 15 日を取得するにはどうすればよいですか。

また、日付が 2013 年 6 月 2 日の場合

範囲は 5 月 26 日から 6 月 1 日である必要があります

4

5 に答える 5

35

これは 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);

出力

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

それはローカライズされており、私のロケールでは週は月曜日から始まります

于 2013-06-20T10:23:34.870 に答える
20

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);
于 2016-01-04T15:18:57.583 に答える
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);
于 2013-06-20T10:06:49.383 に答える