Trabalhando com o NSCalendar - recebendo a próxima primeira terça -feira de um mês
-
22-09-2019 - |
Pergunta
Isso é um pouco estranho, mas é possível usar um NSCalendar (ou qualquer componente, para esse assunto) descobrir qual seria a data da próxima "primeira terça -feira do mês"?
Por exemplo, hoje é quinta -feira, 25 de março de 2010. A próxima "primeira terça -feira do mês" seria em 6 de abril. Da mesma forma, se eu estivesse procurando a próxima "primeira terça -feira do mês" em 1º de abril, ainda seria em 6 de abril.
Como você faria isso?
Muito obrigado !!!!!
Solução
O código abaixo calcula a primeira terça -feira de uma determinada combinação mês/ano. Está escrito em Macruby Porque é com isso que eu apenas tentei, mas você não deve ter problemas para convertê-lo em objetivos adequados, é apenas uma sintaxe diferente (eu amo MacRuby para experimentar rapidamente uma ideia):
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"
Deixo para você determinar a "próxima primeira terça -feira" a partir de uma determinada data: faça o cálculo para o mês da data atual primeiro e se o resultado estiver no passado, faça -o novamente no mês seguinte. Usar -[NSCalendar components:fromDate:]
Para obter a combinação do mês/dia de um determinado nsdate.
Outras dicas
Infelizmente, não posso verificar a incapacidade deste código, mas alguns devem ficar assim:
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];
Para amostras e informações detalhadas, veja isso guia