在NSDate无法获得当天的开始

我需要NSDate格式的当天的开始和结束,因为我有一个nspredicate来获取此范围之间的数据。 所以我写了一个函数来找到当天的开头,就是这样

NSDate *now = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now]; [components setHour:0]; [components setMinute:0]; [components setSecond:0]; NSDate *start = [calendar dateFromComponents:components]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSString *strFromDate = [formatter stringFromDate:start]; 

当我尝试nslog strFromDate它显示当前一天的确切开始,如2013-05-05 00:00:00 +0000但我需要它以nsdate格式,所以当我尝试将其转换为nsdate像这样

 NSDateFormatter * dateFormat = [[NSDateFormatter alloc]init]; [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *dateStr = [[NSDate alloc]init]; dateStr = [dateFormat dateFromString:strFromDate]; 

当我登录时,结果变为2013-05-05 18:30:00 +0000。 我尝试了很多代码,当我尝试以nsstring格式打印时,我得到了理想的结果,不知道nsdate出了什么问题。 如果有人可以指导我。 提前致谢

当我登录时,结果变为2013-05-05 18:30:00 +0000

仔细阅读结果。 最后的+0000是有意义的。 这意味着GMT(在伦敦的时间)。 所以这就是说伦敦的时间是18:30:00 。 但是,假设你在印度。 那是5:30 ,也就是午夜。 这正是你想要的。