ARC*_*ARC 1 cocoa cocoa-touch objective-c
我使用以下代码片段来查找两个日期之间的差异,结果是关闭一天:
NSString * dateString = @"2011-11-26" ;
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate * today = [[NSDate alloc] init];
NSDate * futureDate = [dateFormatter dateFromString:dateString];;
NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSDayCalendarUnit;
NSDateComponents * components = [gregorian components:unitFlags fromDate:today toDate:futureDate options:0];
NSLog(@"Number of days: %i",[components day]);
[today release];
[dateFormatter release];
Run Code Online (Sandbox Code Playgroud)
天数:6以上代码.实际上距离2011年11月19日是7天.

更新:以下工作正常.我在重复代码吗?
NSString * dateString = @"2011-11-26" ;
NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate * today = [NSDate date];
NSCalendar * greg = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSUInteger uf = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents * comp = [greg components:uf fromDate:today];
today = [greg dateFromComponents:comp];
NSDate * futureDate = [dateFormatter dateFromString:dateString];;
NSCalendar * gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSUInteger unitFlags = NSDayCalendarUnit;
NSDateComponents * components = [gregorian components:unitFlags fromDate:today toDate:futureDate options:0];
NSLog(@"Number of days: %ld",[components day]);
Run Code Online (Sandbox Code Playgroud)
Apple的文档components:fromDate:toDate:说这个:
如果没有足够小的单位要求保持差异的全部精度,则结果是有损的.
这意味着它想告诉你的区别是"6天12小时31分2秒......"但你只问了几天,所以你回来了6.我的建议是今天回合首先是日期到午夜,所以它是距离目标日期的整数天.
编辑:您可以通过要求NSCalendar为您NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit提供今天的日期,然后从这些组件重新构建日期来进行此舍入.(分别使用components:fromDate:和dateFromComponents:.)