个人感觉,比用NSDateComponents 的方式简洁。简单测试了下,没有问题。大家测试有问题的话,请反馈一下。
//timeIntervalSince1970是以GMT时间为准的,需要把时区纠正过来。
NSTimeZone* zone = [NSTimeZone systemTimeZone] ;
NSTimeInterval interval = oldDate.timeIntervalSince1970;
NSTimeInterval newInterval = interval-fmod(interval+zone.secondsFromGMT,60*60*24);
//将interval减去interval除以 一天的秒数 后的余数。
//NSTimeInterval实际是double类型,%只能用于int型,所以需要用fmod函数。
NSDate* newDate = [NSDate dateWithTimeIntervalSince1970:newInterval];
用NSDateComponents的方式:
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:flags fromDate:date];
NSDate* dateOnly = [calendar dateFromComponents:components];