无法在NSDate获得当天的开始

时间:2013-05-05 14:16:31

标签: ios core-data

我需要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出了什么问题。如果有人可以指导我。提前致谢

1 个答案:

答案 0 :(得分:2)

  

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

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