3

回答済みの質問への参照: Geting first and last days of current week

上記のリンクには2つの答えがあります。そのうちの 1 つは理論的なもので、もう 1 つは PyObjC (Python-Objective C ブリッジ言語) と呼ばれる言語で書かれており、簡単な Google 検索で PyObjC が iPhone SDK で動作しないことが確認されています。

質問に関して、PyObjCコードをiPhone SDKと互換性があるように翻訳するにはどうすればよいですか。

対象:今日(火)が19日、日だとします。17日(週の始まり)と土曜日でした。23日は週末。19/01 - 23/01 のような文字列を取得したい [つまり、週の始まり (ハイフン) 週の終わり]

4

4 に答える 4

7

がある場合はNSDate、 currentNSCalendarを使用してその日付の を取得できますNSDateComponentsNSDateComponentsを 1 (週の最初の日) に設定weekdayし、コピーを作成して、コピーweekdayを 7 (週の最後の日) に設定します。次に、 を使用して両方をそれぞれのオブジェクトNSCalendarに変換します。その後、 を使用して文字列表現を作成できます。NSDateComponentsNSDateNSDateFormatter

このリンクには、日付の平日を取得する方法の例があります: https://stackoverflow.com/questions/1057349#1057405

于 2010-01-17T20:53:20.100 に答える
3

これはいくつかのコードで、週の始まりが前の月に始まるエッジ ケースもチェックします。

// Finds the date for the first day of the week
- (NSDate *)getFirstDayOfTheWeekFromDate:(NSDate *)givenDate
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    // Edge case where beginning of week starts in the prior month
    NSDateComponents *edgeCase = [[NSDateComponents alloc] init];
    [edgeCase setMonth:2];
    [edgeCase setDay:1];
    [edgeCase setYear:2013];
    NSDate *edgeCaseDate = [calendar dateFromComponents:edgeCase];

    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:edgeCaseDate];
    [components setWeekday:1]; // 1 == Sunday, 7 == Saturday
    [components setWeek:[components week]];

    NSLog(@"Edge case date is %@ and beginning of that week is %@", edgeCaseDate , [calendar dateFromComponents:components]);

    // Find Sunday for the given date
    components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:givenDate];
    [components setWeekday:1]; // 1 == Sunday, 7 == Saturday
    [components setWeek:[components week]];

    NSLog(@"Original date is %@ and beginning of week is %@", givenDate , [calendar dateFromComponents:components]);

    return [calendar dateFromComponents:components];
}

編集:上記の関連コード

- (NSDate *)firstDayOfWeekFrom:(NSDate *)givenDate {
  NSCalendar *calendar = [NSCalendar currentCalendar];

  NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:givenDate];
  [components setWeekday:1]; // 1 == Sunday, 7 == Saturday
  [components setWeekOfYear:[components weekOfYear]];

  return [calendar dateFromComponents:components];
}
于 2013-02-04T14:22:22.333 に答える