2013-04-16 3 views
1

NSDateComponents и NSCalendar имеют возможность совершать n-ый рабочий день месяца с помощью NSWeekdayOrdinalCalendarUnit с помощью NSCalendarUnit.Последний день недели месяца с NSDateComponents

Например, 2-го понедельника месяца.

Это замечательно, но, Мне нужно проверить, является ли какой-либо экземпляр NSDate последним или вторым последним днем ​​недели. Я не могу придумать аккуратный способ сделать это. Я надеюсь, что есть простой трюк, который не требует, чтобы вы проходили все месяцы месяца.

У вас есть идеи?

ответ

3

Просто добавьте семь дней (используя NSCalendardateByAddingComponents:toDate:options:) и проверьте, совпадает ли полученный месяц.

+1

Так просто, полюбите его! Простое предложение: apple docs говорит о dateByAddingComponents: «Обратите внимание, что некоторые вычисления могут занимать относительно много времени». Я думаю, что для вычислений сложнее, чем добавлять дни (например, годы и месяцы с разной длиной), но вы также можете использовать «dateWithTimeInterval: (86400 * 7) fromDate: dateToTest». Я понятия не имею, какой из них быстрее. –

+0

@ Micazeve Просто добавление 7 раз 24 часов может привести к проблемам при изменении летнего времени и других тонких аномалиях календаря. Причина, по которой правильный метод 'NSCalendar' может занять некоторое время, состоит в том, что он учитывает все эти аномалии. –

+0

О, я не думал о изменениях дневного света ... Спасибо за ваше объяснение! –

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