Вы можете спросить у календаря, сколько времени занимает любая единица (и когда эта единица запускается) с помощью rangeOfUnit:startDate:interval:forDate:
.
// Test date (the day DST begins)
NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = 2012;
components.month = 3;
components.day = 11;
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:components];
NSTimeInterval dayLength;
[calendar rangeOfUnit:NSDayCalendarUnit startDate:NULL interval:&dayLength forDate:date];
NSLog(@"%f seconds", dayLength);
Обратите внимание, что rangeOfUnit:...
может технически завершиться с ошибкой и вернуть NO
, но если вы управляете входами, этого не должно быть.