Question

Ceci est un peu bizarre, mais est-il possible d'utiliser un NSCalendar (ou tout autre composant, pour cette question) de comprendre ce que la date de la prochaine « premier mardi du mois » serait?

Par exemple, aujourd'hui est le jeudi 25 Mars 2010. Le prochain « premier mardi du mois » serait le 6 Avril De même, si je cherche le prochain « premier mardi du mois » le 1er Avril, il serait encore le 6 Avril.

Comment voulez-vous faire?

Merci beaucoup !!!!!

Était-ce utile?

La solution

Le code ci-dessous calcule le premier mardi d'une combinaison de mois / année. Il est écrit dans MacRuby parce que c'est ce que je l'ai juste essayé avec, mais vous devriez avoir aucun problème pour le convertir en bon Objective-C, il est juste une syntaxe différente (j'adore MacRuby pour essayer rapidement une idée):

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"

Je vous laisse pour déterminer le « premier mardi prochain » à partir d'une date donnée: faire le calcul pour le mois de la date actuelle première et si le résultat est dans le passé, faites-le à nouveau pour le mois suivant. Utilisez -[NSCalendar components:fromDate:] pour obtenir le combo mois / jour d'un NSDate donné.

Autres conseils

Malheureusement, je ne peux pas vérifier l'incapacité de ce code, mais certains devraient ressembler à ceci:

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];

Pour les échantillons et les informations détaillées voir cette Guide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top