23

現在の日付の前の最後の日曜日を取得するための次のコードがあります。

Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.WEEK_OF_YEAR, calendar.get(Calendar.WEEK_OF_YEAR)-1);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
Log.e("first day", String.valueOf(calendar.get(Calendar.DAY_OF_MONTH)));

しかし、このコードは機能しません。教えてください、どうすれば修正できますか?

4

7 に答える 7

27

これは機能します。最初に日数を取得し、それを現在の日付で減算して 1 を加算します (日曜日の場合)。

Calendar cal=Calendar.getInstance();
cal.add( Calendar.DAY_OF_WEEK, -(cal.get(Calendar.DAY_OF_WEEK)-1)); 
System.out.println(cal.get(Calendar.DATE));

編集:コメントで Basil Bourqueが指摘したように、Grzegorz Gajosによる Java 8 以降の回答を参照してください。

于 2012-10-08T14:29:08.843 に答える
6

日曜日に到着するまで、1 日単位で繰り返すことができます。

Calendar cal = Calendar.getInstance();
while (cal.get( Calendar.DAY_OF_WEEK ) != Calendar.SUNDAY)
    cal.add( Calendar.DAY_OF_WEEK, -1 );

または、たった 1 つのステップで、日曜日と現在の日数の差を引きます。

Calendar cal = Calendar.getInstance();
int dayOfTheWeek = cal.get( Calendar.DAY_OF_WEEK );
cal.add( Calendar.DAY_OF_WEEK, Calendar.SUNDAY - dayOfTheWeek );
于 2012-10-08T13:58:09.947 に答える
0

以下は、月と年に関係なく機能します。

 Calendar cal = Calendar.getInstance(TimeZone.getDefault());
 Date date = cal.getTime();
 int days = cal.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY;
 date.setTime(date.getTime() - (long) (days*1000*60*60*24));
 cal.setTime(date);
于 2015-01-26T07:32:54.757 に答える