0

これを達成する最善の方法がわからない。

 NSDate *date = [NSDate date]; 

日付を検索して文字列値を返す必要があります。

12/17/2011 < date < 12/23/2011  return "20120101"

12/24/2011 < date < 12/30/2012   return "20120102"

12/31/2011 < date < 01/06/2012   return "20120201"

...

10/20/2012 < date < 10/26/2012  return "20122301"

...

11/02/2013 < date < 11/08/2013   return "20132301"

..

5年間...毎週

date は、2017 年 12 月までの任意の日付にすることができます。

戻り文字列の背後にあるロジックがわからないため、日付に基づいて文字列を単純に計算することはできません。戻り文字列 (モデルで NSDate に変換されます) は、fetchedresultscontroller のセクションとして正常に使用されます。

NSDate に基づいてルックアップ テーブルを作成する方法や、モンスターの if/case ステートメントが必要かどうかがわかりません。

4

1 に答える 1

1

問題の日付の「週番号」を計算し、文字列の配列から値を取得します。これはあなたのために働くはずです:

// Create an array of your strings.
// This would probably be best to read from a file since you have so many
NSArray *strings                = [NSArray arrayWithObjects:
                                   @"20120101",
                                   @"20120102",
                                   @"20120201",
                                   @"20122301",
                                   @"20132301", nil];

// Create a new date formatter so that we can create our dates.
NSDateFormatter *formatter      = [NSDateFormatter new];
formatter.dateFormat            = @"MM/dd/yyyy";

// Create the date of the first entry in strings.
// We will be using this as our starting date and will calculate the
// number of weeks that has elapsed since then.
NSDate *earliestDate            = [formatter dateFromString:@"12/17/2011"];

// The date to check
NSDate *dateToCheck             = [formatter dateFromString:@"01/12/2012"];

// Create a calendar to do our calculations for us.
NSCalendar *cal                 = [NSCalendar currentCalendar];

// Calculate the number of weeks between the earliestDate and dateToCheck
NSDateComponents *components    = [cal components:NSWeekCalendarUnit
                                         fromDate:earliestDate
                                           toDate:dateToCheck
                                          options:0];
NSUInteger weekNumber           = components.week;

// Lookup the entry in the strings array.
NSString *string;
if (weekNumber < [strings count])
{
    string = [strings objectAtIndex:weekNumber];
}

// Output is:  "String is: 20122301"
NSLog(@"String is: %@", string);
于 2012-09-03T04:41:18.303 に答える