Время NSDate, NSCalendar и NSDateComponents

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"

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

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

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


person clement    schedule 12.04.2011    source источник


Ответы (2)


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

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

person visakh7    schedule 12.04.2011
comment
спасибо за помощь, мне просто нужно закодировать второй вопрос; добавить/вычесть день ^^ - person clement; 12.04.2011

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

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

person Steven Kramer    schedule 12.04.2011
comment
Отлично, пожалуйста, примите ответ, чтобы люди могли его найти... вы поняли суть dateByAddingComponents? - person Steven Kramer; 12.04.2011
comment
Не пытайтесь кодировать на основе значений в Cocoa - все является ссылкой (то есть указателем на объект). Используйте 1_ - person Steven Kramer; 12.04.2011
comment
Уверены ли вы? Возможно, вы захотите сначала измерить это, т.к. в большинстве приложений постоянно создаются тонны объектов. - person Steven Kramer; 12.04.2011
comment
Не волнуйтесь. Ваши пользователи не могут провести пальцем достаточно быстро, чтобы заметить создание объекта. До нескольких тысяч создания/освобождения объектов в секунду (как минимум!) не должно быть заметно. - person Steven Kramer; 12.04.2011