Работа с Nscalendar - получение первого вторника месяца

StackOverflow https://stackoverflow.com/questions/2516315

  •  22-09-2019
  •  | 
  •  

Вопрос

Это немного странно, но возможно ли использовать NSCALENDAR (или любой компонент, в этом отношении), чтобы выяснить, какая будет дата следующего «Первого вторника месяца»?

Например, сегодня в четверг, 25 марта 2010 года. Следующий «первый вторник месяца» состоится 6 апреля. Точно так же, если бы я искал следующий «первый вторник месяца» 1 апреля, это все равно будет 6 апреля.

Как бы вы это сделали?

Спасибо большое!!!!!

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

Решение

Приведенный ниже код рассчитывает первый вторник данной комбинации месяца/года. Это написано в МакРуби Поскольку это то, с чем я только что попробовал, но у вас не должно быть проблем, чтобы преобразовать его в правильную Objective-C, это просто другой синтаксис (я люблю Macruby за то, что он быстро попробовал идею):

dc = NSDateComponents.alloc.init
# Set month to April 2010
dc.setYear 2010
dc.setMonth 4

dc.setWeekday 3 # 1 = Sunday, 2 = Monday, ...
dc.setWeekdayOrdinal 1 # We want the first weekday of the month

cal = NSCalendar.alloc.initWithCalendarIdentifier NSGregorianCalendar
date = cal.dateFromComponents dc
date.description # => "2010-04-06 00:00:00 +0200"

Я оставляю вам, чтобы определить «следующий первый вторник» с данной даты: сначала сделайте расчет месяца текущей даты, и если результат в прошлом, сделайте это снова в течение следующего месяца. Использовать -[NSCalendar components:fromDate:] Чтобы получить комбинацию месяца/день данного NSDATE.

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

К сожалению, я не могу проверить неспособность этого кода, но некоторые должны выглядеть так:

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setWeekday:2]; // Monday
[components setMonth:5]; // May
[components setYear:2008];
[components setWeekdayOrdinal:1]
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];

Для образцов и подробной информации см. Это руководство

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top