5

2013年7月8日編集:Appleには、Objective-Cのさまざまな日付と時刻のクラス、およびそれらを使用して時間の計算/操作を正しく実行する方法を理解するのに本当に役立つWWDCビデオの優れたセットがあります。

「一般的な日付と時刻の課題の解決策」(HDビデオSDビデオスライド(PDF))(WWDC 2013)
「カレンダー計算の実行」(SDビデオスライド(PDF))(WWDC 2011)

注:リンクには、無料のAppleDeveloperメンバーシップが必要です。

友達のポッドキャスト用のアプリを書いています。彼女は毎週日曜日の午後5時に番組をライブで放送しています。アプリにコードを記述して、オプションでその時間のローカル通知をスケジュールし、次のライブ番組がいつになるかをユーザーに通知できるようにしたいと思います。「次の日曜日の太平洋時間午後5時」を表すNSDateオブジェクトを取得するにはどうすればよいですか。(明らかに、これはユーザーが使用しているタイムゾーンに変換する必要があります)

4

1 に答える 1

14

まず、現在の曜日を取得します。

NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

NSDateComponents *dateComponents = [calendar components:NSCalendarUnitWeekday | NSCalendarUnitHour fromDate:now];
NSInteger weekday = [dateComponents weekday];

Appleドキュメントでは、平日を次のように定義しています。

平日の単位は1からnまでの数字で、nは週の日数です。たとえば、グレゴリオ暦では、nは7で、日曜日は1で表されます。

次に、次の日曜日の5時に到達するために追加する日数を計算します。

NSDate *nextSunday = nil;
if (weekday == 1 && [dateComponents hour] < 5) {
    // The next Sunday is today
    nextSunday = now;
} else {
    NSInteger daysTillNextSunday = 8 - weekday;
    int secondsInDay = 86400; // 24 * 60 * 60  
    nextSunday = [now dateByAddingTimeInterval:secondsInDay * daysTillNextSunday];
 }

5:00に取得するには、時間と分nextSundayを5:00に変更するだけです。[NSDate date]から現在の日付を取得するを見てください。ただし、時刻を午前10時に設定してください。

于 2012-10-10T23:04:52.547 に答える