2013-02-19 2 views
0

Я искал способ форматирования следующего NSDate объекта:NSDateFormatter форматировать недели с датой

19 Feb 2013 

Как этого

18-25 Feb 2013 

The 19 происходит в течение недели с 18 и 25 февраля.

Я не мог сделать простой способ сделать это, есть ли встроенная функциональность в NSDateFormater? должен ли я реализовать его сам?

+0

Я предполагаю, что вам нужно будет использовать NSCalendar. –

ответ

2

Я не думаю, что в NSDateFormatter есть встроенные функции для этого. Тем не менее, у Apple есть example того, как получить значения 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]; 
+1

Здесь на SO рекомендуется копировать соответствующий контент и размещать его здесь, а не просто размещать ссылку. Таким образом, если URL-адрес когда-либо изменится, это по-прежнему полезный ответ. – lnafziger

+0

Спасибо, я создал 2 NSDate [s] для начала и конца недели и отформатировал его сам. –

+1

Отредактировано для включения содержимого из URL-адреса. – Bradford2000

Смежные вопросы