同一date的NSDate和NSDateComponent值之间的差异

我创build了一个简单的函数来获取一天中的第一天和最后一天。 看着NSLog的输出,我发现从同一date的NSDate描述符和组件日返回不同的值,为什么呢?

这里NSLog输出:

NSDATE: 2011-04-03 22:00:00 +0000, DAY COMPONENT: 4 NSDATE: 2011-04-09 22:00:00 +0000, DAY COMPONENT: 10 

正如你所看到的,NSDATE是4月3日,第一行的date分量是4,第二行分别是9和10。

这里代码:

 NSDate *date = [NSDate date]; //Today is April 5th 2011 NSCalendar *cal =[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; [cal setFirstWeekday:2]; //My week starts from Monday //DEFINE BEGINNING OF THE WEEK NSDate *beginningOfWeek = nil; [cal rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek interval:nil forDate:date]; NSDateComponents *beginComponents = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit) fromDate:beginningOfWeek]; //DEFINE END OF THE WEEK, WITH 6 days OFFSET FROM BEGINNING NSDateComponents *offset = [[NSDateComponents alloc]init]; [offset setDay:6]; NSDate *endOfWeek = [cal dateByAddingComponents:offset toDate:beginningOfWeek options:0]; NSDateComponents *endComponents = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit) fromDate:endOfWeek]; NSLog(@"NSDATE: %@, DAY COMPONENT: %d",beginningOfWeek, [beginComponents day]); NSLog(@"NSDATE: %@, DAY COMPONENT: %d",endOfWeek, [endComponents day]); 

您的date正在打印时区为+0000(UTC),而您的NSCalendar实例(因此您的NSDateComponents)正在使用您的设备的默认时区(我猜测是UTC + 2 )。