私は特定の日付の前に月曜日が必要な状況があります(特定の日付はlocaltournament.entryDeadlineです)。私は以下を試しましたが、それは私に同じ日付を返します。私はいくつかの同様の質問が見つかりましたが、iOS上でこれを行うことはできません。それは簡単だと思いますが、私は実際にココアのデート・フレームワークが好きですが、私は今これで困っています。iOSの今日の前日の月曜日を見つける
私は間違っていますか?結果(必ず月曜日でなければなりません)はlocalTournament.entryOpenにあります。
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [calendar components:(NSYearCalendarUnit | NSWeekdayCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:localTournament.entryDeadline]; //1=sunday, 2=monday, etc
if(comps.weekday > 2) {
//later in same week
[comps setWeekday:2];
[comps setHour:12];
localTournament.entryOpen = [calendar dateFromComponents:comps];
} else if(comps.weekday == 1) {
//sunday, go back a week
[comps setWeek:-1];
[comps setWeekday:2];
[comps setHour:12];
localTournament.entryOpen = [calendar dateByAddingComponents:comps toDate:localTournament.entryDeadline options:0];
} else {
//already monday, use previous week
[comps setWeek:-1];
[comps setHour:12];
localTournament.entryOpen = [calendar dateByAddingComponents:comps toDate:localTournament.entryDeadline options:0];
}
[calendar release];
一部のロケールでは、日曜日は週の始まりではないため、月曜日は2日目ではありません。これには考慮されません。 – kris
Krisのコメントについては、「週の初めの取得」の例については、iOSの日付と時刻のプログラミングガイドの「日の計算」のセクションを参照してください。 http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendricalCalculations.html#//apple_ref/doc/uid/TP40007836-SW1 – Alan