現在の日付より前の最後の日曜日を取得するための次のコードがあります。
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)));
しかし、このコードは機能しません。教えてください、どうすれば修正できますか?
これは機能します。最初に日数を取得し、次にそれを現在の日で減算して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));
これは、 TemporalAdjusters (Java 8以降のみ)によって簡単に実現できます。
LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.SUNDAY))
今日が日曜日で、現在の日を取得したい場合は、次のようにします。
LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY))
日曜日に到着するまで、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 );
これは、Jodaで週の最後の曜日を計算するためのスニペットです。
import org.joda.time.DateTime
import org.joda.time.DateTimeConstants
DateTime now = DateTime();
int offset = ((now.dayOfWeek - DateTimeConstants.THURSDAY) + 7) % 7;
DateTime lastThursday = now.minusDays(offset);
DateTimeConstants.THURSDAY
を選択した日に置き換えるだけです。
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(cal.getTimeInMillis() //
// Saturday is the 7th day of week, so use modulo to get it : remove day between todoay
- (( cal.get(Calendar.DAY_OF_WEEK) % 7) * 86400000)); // 86400000=24*60*60*1000
System.out.println(cal.getTime());
. . .
Kotlin拡張機能と Joda Timeライブラリ を使用してこれを行う方法は次のとおりです。
回答はlinquの回答に基づいていますが、これによりその回答のバグも修正されます。バグは、現在の日付が取得しようとしているのと同じ日である場合は機能しないことでした。
/**
* E.g., DateTimeConstants.SUNDAY
*/
fun DateTime.previousDayOfWeek(day: Int): DateTime {
var date = this
if(date.dayOfWeek == day) date = date.minusDays(1)
val offset = (date.dayOfWeek - day + 7) % 7
return date.minusDays(offset)
}
fun DateTime.previousSunday(): DateTime {
return previousDayOfWeek(DateTimeConstants.SUNDAY)
}
以下は、月と年に関係なく私のために働きます。
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);