Iphone NSDATE组件在2月28日给出了错误的日期

Iphone NSDATE组件在2月28日给出了错误的日期,iphone,nsdate,nsdatecomponents,Iphone,Nsdate,Nsdatecomponents,我正试图在二月份内进行搜索。所以我想知道最后一天是28天还是29天。我在做三月底的减法 NSDate* endFeb = [march dateByAddingTimeInterval: (NSTimeInterval) -24 * 3600]; NSDateComponents *feb = [gregorian components: units fromDate: endFeb]; 这给了我正确的日期但不是正确的日期 (gdb) po [gregorian dateFromCompone

我正试图在二月份内进行搜索。所以我想知道最后一天是28天还是29天。我在做三月底的减法

NSDate* endFeb = [march dateByAddingTimeInterval: (NSTimeInterval) -24 * 3600];
NSDateComponents *feb = [gregorian components: units fromDate: endFeb];
这给了我正确的日期但不是正确的日期

(gdb) po [gregorian dateFromComponents: feb]
2011-02-28 00:00:00 +0000
(gdb) p (int) [feb day]
$1 = 27

如果重要的话,可以在iPad4.3模拟器上使用。

要确定2月有28天还是29天,您可以使用以下内容:

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2008];
[components setMonth:2];
[components setDay:1];
NSDate *febDate = [calendar dateFromComponents:components];

NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:febDate];

NSLog(@"%u days in february", range.length);
这样,您就不必处理时区偏移。我想这就是你的代码的问题