Правильное использование NSDateComponents

Я следил за документами Apple, а также за некоторым кодом здесь, и я не могу заставить NSDateComponents работать правильно.

NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:(NSHourCalendarUnit|NSMinuteCalendarUnit) fromDate:dateValue];
[calendar release];

dateValue - это некоторая дата, меня интересует только ее время, а время - 8:00 утра. Когда я проверяю, какие компоненты находятся после этого, часы и минуты равны нулю.

Я также пытался вставить это, потому что я читал, что вам нужно (хотя это есть не в каждом примере):

[components setCalendar:calendar];

person JPC    schedule 25.08.2011    source источник


Ответы (1)


Этот код будет работать. Может быть, это потому, что вы пытаетесь неправильно получить доступ к часам и минутам. Я сделал это и получил текущий час и минуту в окне консоли:

NSDate *dateValue = [NSDate date];
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:(NSHourCalendarUnit|NSMinuteCalendarUnit) fromDate:dateValue];
NSLog(@"hour: %d, minute: %d", [components hour], [components minute]);
[calendar release];

-hour и -minute возвращают простые целые числа, а не объекты NSNumber.

Начиная с ios8 выше константа класса устарела, используйте код ниже:

NSDate *dateValue = [NSDate date];
NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [calendar components:(NSCalendarUnitHour|NSCalendarUnitMinute) fromDate:dateValue];
NSLog(@"hour: %ld, minute: %d", (long)[components hour], [components minute]);
person SSteve    schedule 25.08.2011
comment
На самом деле это было связано с календарем. Я думаю, что просто продолжал проверять одно и то же время снова и снова, и так получилось, что мой календарь - часовой пояс -8, я полагаю, поэтому я получал 0. - person JPC; 26.08.2011