2010-12-14 5 views
6

Ich habe eine Kalenderanwendung, in der ich das nächste Jahr ab dem aktuellen Datum (NSDate) bekommen möchte.Komm nächstes Jahr vom aktuellen NSDate?

Wie kann ich das tun?

+1

Holen Sie sich einfach das Jahr vom aktuellen Datum und fügen Sie eins hinzu. Welchen Teil weißt du nicht? – Gabe

Antwort

19

Sie können NSDateComponents all die harte Arbeit auszukommen Schaltjahre für die Berechnung und Schaltsekunden:

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

Wie VdesmedT erwähnt, können Sie dateByAddingTimeInterval verwenden und die Sekunden von einem Jahr hinzuzufügen. Aber um genauer zu sein, können Sie Folgendes tun:

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

Hoffe, das hilft.

1

Das ist meine Version: in swift.

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