我使用以下代码段来查找两个日期之间的差异,结果将在一天之内关闭:
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];
天数:以上代码为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]);
答案 0 :(得分:7)
Apple关于components:fromDate:toDate:
的文档说:
如果没有足够小的单位要求保持差异的全部精度,则结果是有损的。
这意味着它想告诉你区别是“6天12小时31分2秒......”但你只问了几天,所以你回来了6.我的建议是首先将今天的日期舍入到午夜,这样它就是距离目标日期的整数天。
编辑:您可以通过要求NSCalendar为您提供今天日期的NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
,然后从这些组件重新构建日期来进行此舍入。 (分别使用components:fromDate:
和dateFromComponents:
。)