0

次のNSDateオブジェクトをフォーマットする方法を探していました。

19 Feb 2013

そのように

18-25 Feb 2013

19は、2月18日から25日までの1週間以内に発生します。

簡単な方法ではありませんでしたが、NSDateFormaterに組み込みの機能はありますか?自分で実装する必要がありますか?

4

1 に答える 1

2

NSDateFormatterにはこれを行うための機能が組み込まれているとは思いません。ただし、Appleには、日付が指定された週の最初と最後の日のNSDate値を取得する方法の例があります。今週の日曜日を取得する例を次に示します。

NSDate *today = [[NSDate alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc]
          initWithCalendarIdentifier:NSGregorianCalendar];

// Get the weekday component of the current date
NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit
          fromDate:today];

/*
Create a date components to represent the number of days to subtract from the current date.
The weekday value for Sunday in the Gregorian calendar is 1, so subtract 1 from the number of days to subtract from the date in question.  (If today is Sunday, subtract 0 days.)
*/
NSDateComponents *componentsToSubtract = [[NSDateComponents alloc] init];
[componentsToSubtract setDay: 0 - ([weekdayComponents weekday] - 1)];

NSDate *beginningOfWeek = [gregorian dateByAddingComponents:componentsToSubtract
          toDate:today options:0];

/*
Optional step:
beginningOfWeek now has the same hour, minute, and second as the original date (today).
To normalize to midnight, extract the year, month, and day components and create a new date from those components.
*/
NSDateComponents *components =
     [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit |
          NSDayCalendarUnit) fromDate: beginningOfWeek];
beginningOfWeek = [gregorian dateFromComponents:components];

日曜日はすべてのロケールで週の始まりではないため、カレンダーのロケールで定義されている週の始まりを取得する方法も示しています。

NSDate *today = [[NSDate alloc] init];
NSDate *beginningOfWeek = nil;
BOOL ok = [gregorian rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek
                     interval:NULL forDate: today];
于 2013-02-19T17:00:58.340 に答える