同一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 )。