Lavorare con NSCalendar - ricevendo il prossimo primo martedì del mese
-
22-09-2019 - |
Domanda
Questo è un po 'strano, ma è possibile utilizzare un NSCalendar (o di qualsiasi componente, è per questo) per capire che cosa la data della prossima "primo martedì del mese" sarebbe?
Per esempio, oggi è Giovedi 25 marzo 2010. La prossima "primo martedì del mese" sarebbe il 6 aprile Allo stesso modo, se io stavamo cercando per il prossimo "primo martedì del mese" il 1 ° aprile, si sarebbe ancora il 6 aprile.
Come si dovrebbe fare questo?
Grazie mille !!!!!
Soluzione
Il codice di seguito calcola il primo Martedì di un dato mese combinazione / anno. E 'scritto in MacRuby perché questo è quello che ho appena provato con, ma si dovrebbe avere problemi per convertirlo corretta Objective-C, è solo una sintassi diversa (io amo MacRuby per provare rapidamente un'idea):
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"
Lascio a voi per determinare il "prossimo primo Martedì" da una certa data: fare il calcolo per il mese della data corrente prima e se il risultato è nel passato, farlo di nuovo per il mese successivo. Utilizzare -[NSCalendar components:fromDate:]
per ottenere il mese / giorno combo di un determinato NSDate.
Altri suggerimenti
Purtroppo non posso verificare l'incapacità di questo codice, ma un po 'dovrebbe apparire così:
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];
Per i campioni e le informazioni dettaglio vedono questo guida