Вопрос

У меня следующая проблема:Мне нужно создать NSmutabeArray для каждого дня недели после определенной даты.

Это должно выглядеть так:

  • Четверг, 28 октября 2010 г.
  • Четверг, 4 октября 2010 г.
  • Четверг, 11 октября 2010 г.
  • ...

Как мне это сделать?Я думаю, что это как-то связано с NSCalendar, но я не могу найти правильное решение...Не могли бы вы помочь мне?

заранее спасибо

ФФраенц

Это было полезно?

Решение

Это бесконечная серия;NSmutableArray может содержать только конечную коллекцию.

В любом случае вам нужен только один член серии, например 2010-10-28.Чтобы получить четверг после этого, добавьте одну неделю.Чтобы получить третью дату в серии, добавьте неделю ко второй дате или две недели к первой дате.Наличие любого члена серии дает вам доступ к любому другому члену серии.

Если вы начинаете с даты, которая не является подходящим днем ​​недели, получите компоненты даты для этой даты, добавьте разницу между правильным днем ​​недели и днем ​​недели, который у нее есть, к ее дню месяца и преобразуйте измененные компоненты даты обратно в свидание.Тогда эта дата будет приходиться на желаемый день недели на той же неделе.

Другие советы

Чтобы иметь фактическую дату:

NSDate *today = [[NSDate alloc] init];

Чтобы добавить неделю:

NSDate *nextDate = [today dateByAddingTimeInterval:60*60*24*7];

Затем вы можете перебрать и создать свой массив:

NSMutableArray* dates = [[NSMutableArray alloc] init];
NSDate *date= [[NSDate alloc] init];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setWeek:1];

for (int i=0;i<10;i++) {
  NSDate *nextDate = [gregorian dateByAddingComponents:offsetComponents toDate:date options:0];
  [dates addObject:date];
  [date release];
  date = nextDate;
}
[date release];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top