2010-12-14 6 views
6

Ho un'applicazione di calendario in cui voglio ottenere l'anno successivo dalla data corrente (NSDate).Ricevi l'anno prossimo dall'attuale NSDate?

Come posso fare questo?

+1

Basta prendere l'anno dalla data corrente e aggiungerne uno. Quale parte non sai come fare? – Gabe

risposta

19

È possibile effettuare NSDateComponents fare tutto il duro lavoro di calcolo anni bisestili e secondo salto:

NSDate *today = [[NSDate alloc] init]; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init]; 
[offsetComponents setYear:1]; 
NSDate *nextYear = [gregorian dateByAddingComponents:offsetComponents toDate:today options:0]; 
5

Come accennato VdesmedT, è possibile utilizzare dateByAddingTimeInterval e aggiungere i secondi di un anno. Ma per essere più precisi, puoi fare quanto segue:

NSDate *today = [NSDate date]; // get the current date 
NSCalendar* cal = [NSCalendar currentCalendar]; // get current calender 
NSDateComponents* dateOnlyToday = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:today]; 
[dateOnlyToday setYear:([dateOnlyToday year] + 1)]; 
NSDate *nextYear = [cal dateFromComponents:dateOnlyToday];

Spero che questo aiuti.

1

Questa è la mia versione: in rapido.

let calendar = NSCalendar.currentCalendar() 
let newDate = calendar.dateByAddingUnit(.Year, value: 1, toDate: NSDate(), options: NSCalendarOptions.MatchNextTime)