Выберите день в цикле на основе начальной даты и текущей даты - PullRequest
0 голосов
/ 26 марта 2012

Приложение позволяет пользователю определять произвольный набор дней, например, так:

  • День 1 - Сбор цветов
  • День 2 - Выпить кофе
  • День3 - Плавать

В этот набор дней может входить только одна запись или много.Предположим, что этот цикл дней начинается 23 марта 2010 года.

Существует ли общий алгоритм, который может определить, какой день в цикле соответствует данному календарному дню?

24 марта алгоритм должен вернуть День 2, 25 марта должен быть День 3, 26 марта должен быть День 1, и так далее ...

Более конкретно, я пишу этот код для приложения Какао,Итак, если не использовать более общую технику, могут ли классы Календаря помочь мне?

Ответы [ 3 ]

3 голосов
/ 26 марта 2012
NSCalendar *gregorian = ...;
NSDate *startDate = ...;
NSDate *currentDate = [NSDate date];
NSUInteger unitFlags = NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags fromDate:startDate  toDate:currentDate options:0];
NSInteger days = [components day];

days теперь содержит количество дней, прошедших с даты начала.Это можно использовать в качестве индекса (с нуля) в вашем массиве действий.Вы можете использовать оператор модуля с длиной цикла в качестве дивиденда для вычисления индексов после первого прохождения цикла.

1 голос
/ 26 марта 2012

Рассчитайте юлианскую дату (или вариант) начальной даты и текущей даты (эта часть оставлена ​​читателю в качестве упражнения).Текущий день цикла равен (currentDate - startDate) % lengthOfCycle + 1.

0 голосов
/ 26 марта 2012

После этого я понял ответ, и он прост.

Рассчитайте количество дней между начальной датой и текущей датой, затем возьмите это число по модулю общего количества дней в цикле, и у вас будет текущий день. Легко пиши.

...