NSDateComponents在2月28日错误的一天

时间:2011-04-01 22:27:57

标签: iphone nsdate nsdatecomponents

我试图在二月内进行搜索。所以我想弄清楚最后一天是28还是29岁。我正在从3月底开始减法

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

如果重要的话,这是在iPad 4.3模拟器上。

1 个答案:

答案 0 :(得分:2)

要弄清楚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);

这样您就不必混淆时区偏移。我想这是你的代码的问题。