正确使用NSDateComponents

时间:2011-08-25 06:51:54

标签: objective-c cocoa nsdate nscalendar nsdatecomponents

我一直在关注苹果文档以及这里的一些代码,我似乎无法让NSDateComponents正常工作。

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

dateValue是某个日期,我只关心它的时间,时间是上午8:00。当我检查此后的组件时,小时和分钟都是零。

我也试过插入这个,因为我读过你需要的(虽然不是每个例子都有这个):

[components setCalendar:calendar];

1 个答案:

答案 0 :(得分:2)

该代码将起作用。也许是因为你试图错误地访问小时和分钟。我这样做了,并在控制台窗口中获得了当前的小时和分钟:

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