Получить в следующем году от текущей NSDate? - PullRequest
7 голосов
/ 14 декабря 2010

У меня есть приложение календаря, в котором я хочу получить следующий год с текущей даты (NSDate).

Как я могу это сделать?

Ответы [ 4 ]

19 голосов
/ 14 декабря 2010

Вы можете заставить NSDateComponents выполнять всю тяжелую работу по вычислению високосных лет и високосных секунд:

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 голосов
/ 14 декабря 2010

Как упоминалось в VdesmedT, вы можете использовать dateByAddingTimeInterval и добавить секунды одного года.Но если быть более точным, вы можете сделать следующее:

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

Надеюсь, это поможет.

2 голосов
/ 26 мая 2018

Swift 4:

let calendar = Calendar.current
let newDate = calendar.date(byAdding: .year, value: 1, to: Date())
2 голосов
/ 17 апреля 2016

Это моя версия: в быстром.

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