12

先週の月曜日と金曜日の日付を取得する必要があります。これを行うには、今週の月曜日の日付を取得し、7 日を減算します。これで先週の月曜日の日付がわかります。

金曜日の日付を取得するには、4 を追加する必要があります。ここ英国では、何らかの理由で週の最初の日が月曜日ではなく日曜日であるため、これは少し混乱しました。

とにかく、これが私が日付を取得する方法です。

            // Get the dates for last MON & FRI
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);

        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.add(Calendar.DAY_OF_WEEK, -7);

        cal.set(Calendar.HOUR_OF_DAY,0);
        cal.set(Calendar.MINUTE,0);
        cal.set(Calendar.SECOND,0);
        cal.set(Calendar.MILLISECOND,0);

        // Get the date on Friday
        cal.add(Calendar.DAY_OF_WEEK, 4);

        cal.set(Calendar.HOUR_OF_DAY,23);
        cal.set(Calendar.MINUTE,59);
        cal.set(Calendar.SECOND,59);
        cal.set(Calendar.MILLISECOND,0);

上記は機能しますが、ロジックに問題がある場合は興味があります。つまり、2月、うるう年などでも機能します。

より良い解決策/アプローチを自由に提案してください。

ありがとう

4

4 に答える 4

23
于 2016-09-19T19:47:35.580 に答える
10

注: Java 8 以降については、Basil Bourqueの回答 (リンク) をご覧ください。
Java 8 では、Joda-Time の機能のほとんどを提供する新しい時刻/日付 API が導入されました。


Joda-Timeは、そのような問題に対して非常に優れた方法を提供します。

先週の月曜日と金曜日の日付を得るには、Joda Time を使用すると次のようになります。

DateTime today = DateTime.now();
DateTime sameDayLastWeek = today.minusWeeks(1);
DateTime mondayLastWeek = sameDayLastWeek.withDayOfWeek(DateTimeConstants.MONDAY);
DateTime fridayLastWeek = sameDayLastWeek.withDayOfWeek(DateTimeConstants.FRIDAY);

DateTimeオブジェクトからオブジェクトを作成したり、オブジェクトからオブジェクトを作成したりできるためjava.util.Date、Java 日付で簡単に使用できます。


日付で上記のコードを使用する

DateTime today = new DateTime("2012-09-30");

月曜日は「2012-09-17」、金曜日は「2012-09-21」となり、日付が

DateTime tomorrow = new DateTime("2012-10-01");

月曜日は「2012-09-24」、金曜日は「2012-09-28」となります。

于 2012-09-30T12:44:56.703 に答える
6

週の始まりはまだ日曜日に設定されています。つまりCalendar.MONDAY、土曜日は前の月曜日Calendar.MONDAYで、日曜日は次の日です。

あなたがする必要があるのは(上記のコメントに従って、あなたが望む方法に従って)、週の始まりを月曜日に設定することです。

Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.MONDAY);

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.add(Calendar.DAY_OF_WEEK, -7); 
...

それを超えて、金曜日の最後の1秒が範囲に含まれていないことを考えると、あなたの論理は正しいと思われ、閏年/ DSTシフトなどに問題はないはずです.

于 2012-09-30T13:16:35.407 に答える
1

私が間違っていると思う唯一のことは、実際にはMo-Frの範囲をテストしていて、前述のように特定の2日を取得していないということです。排他的な上限で範囲 Mo-Sa をテストする方が安全です。

于 2012-09-30T12:27:17.190 に答える