倒数计时器实现的两个date之间的区别
(2013-04-04T19:14:58 + 02:00-2013-04-03T18:14:58 + 02:00)怎么可能是两个date之间的差异?
代码的结果是
01日06时46分02秒
结果是完全错误的正确答案应该是
01天01时00分00秒
你能帮我找出问题的根源吗?
代码 :
-(void)startTimer { timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES]; } -(void) updateCountdown { NSDate *expirydate = [MSharedFunctions SqldateStringTodate:@"2013-04-04T19:14:58+02:00"]; NSDate *now = [MSharedFunctions SqldateStringTodate:@"2013-04-03T18:14:58+02:00"]; if ([expirydate isEarlierThanDate:[MSharedFunctions SqldateStringTodate:[MSharedFunctions SqldateStringTodateNow]]]) { //Fire end counter //[[NSNotificationCenter defaultCenter] postNotificationName:@"TIMER" object:nil]; } //NSDate *dateFromString = [[NSDate alloc] init]; NSDate *dateFromString =expirydate; //NSLog(@"now %@: endtime :%@ ",[MSharedFunctions SqldateStringTodateNow],@"2013-04-03T18:14:58+02:00"); NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *componentsHours = [calendar components:NSHourCalendarUnit fromDate:now]; NSDateComponents *componentMint = [calendar components:NSMinuteCalendarUnit fromDate:now]; NSDateComponents *componentSec = [calendar components:NSSecondCalendarUnit fromDate:now]; NSDateComponents *componentsDaysDiff = [calendar components:NSDayCalendarUnit fromDate:now toDate:dateFromString options:0]; NSLog(@"%@",[NSString stringWithFormat:@"%02d",componentsDaysDiff.day]); NSLog(@"%@",[NSString stringWithFormat:@"%02d",(24-componentsHours.hour)]); NSLog(@"%@",[NSString stringWithFormat:@"%02d",(60-componentMint.minute)]); NSLog(@"%@",[NSString stringWithFormat:@"%02d",(60-componentSec.second)]); }
SqldateStringTodate函数:
+(NSDate*)SqldateStringTodate:(NSString*) stringdate { stringdate = [stringdate stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange([stringdate length] - 5,5)]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ; NSLocale* formatterLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"] ; [dateFormatter setLocale:formatterLocale]; if (stringdate.length==24) { [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; } else { [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; } //DebugLog(@"New Date %@",stringdate); NSDate *getDate = [dateFormatter dateFromString:stringdate]; return getDate; }
我无法理解你的逻辑,但是如果你想以你想要的方式作为NSDateComponents
获得差异,你可以使用:
NSUInteger unitFlags = NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; NSDateComponents *componentsDaysDiff = [calendar components:unitFlags fromDate:now toDate:dateFromString options:0]; NSLog("%@", componentsDayDiff);
这个收益结果:
<NSDateComponents: 0x75939f0> Leap month: no Day: 1 Hour: 1 Minute: 0 Second: 0
那么…又是怎么回事?
为了得到两个NSDate对象之间的区别,使用timeIntervalSinceDate:
然后,要计算之间的天,小时,分钟和秒,使用模分割。
NSTimeInterval doubleDiff = [date1 timeIntervalSinceDate:date2]; long diff = (long) doubleDiff; int seconds = diff % 60; diff = diff / 60; int minutes = diff % 60; diff = diff / 60; int hours = diff % 24; int days = diff / 24;
您可以将NSTimeInterval(double)转换为长时间不同的方式,具体取决于您是向上舍入还是向下舍入。
- secTaskDiagnoseEntitlements MISSING钥匙串权利:找不到存储的taskRef
- 在GooGle地图上添加UITextField和UiButton
- Xcode 4.6中的iOS7的statusBar
- taskgated:杀死应用程序,因为它不允许使用com.apple.developer.ubiquity-container-identifiers权利
- 你可以使用类别/扩展将IBDesignable属性添加到UIView?
- 如何在使用自适应search时获得对UIPopoverController的引用?
- 正确使用transitionFromViewController:toViewController:duration:options:animations:completion:
- iOS不是典型的后台位置跟踪计时器问题
- 如何更改SearchBar边框颜色