Время NSDate, NSCalendar и NSDateComponents - PullRequest
4 голосов
/ 12 апреля 2011
NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"GMT+2"]];

NSDateComponents *dateComponents = [calendar components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];    

NSInteger day = [dateComponents day];
NSInteger month = [dateComponents month];
NSInteger year = [dateComponents year];

 NSLog(@" %i %i %i ", day, month, year);

Этот код показывает мне "12 2147483647 2147483647"

Как я могу получить месяц и год (целое число)

Как добавить / переслать один день? (если мы тоже первые в этом месяце!)

Спасибо за внимание: -)

Ответы [ 2 ]

9 голосов
/ 12 апреля 2011
NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];

NSInteger year = [dateComponents year];
NSInteger month = [dateComponents month];
NSInteger day = [dateComponents day];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];

[calendar release];

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

2 голосов
/ 12 апреля 2011
  1. Добавление дополнительных единиц к NSDayCalendarUnit | NSWeekdayCalendarUnit - вы не запрашиваете месяц или год, поэтому они недействительны!

  2. Сложение / вычитание объекта NSDateComponentsнастроено на 1 день и [NSCalendar dateByAddingComponents:toDate:options:].В качестве альтернативы, и, вероятно, так же правильно, используйте [NSDate dateWithTimeInterval:sinceDate:]

...