我一直在尝试计算我在这个网站上找到的例子,但不知怎的,我每次都得到0值。我是IOS的新手,NSDate给了我一笔钱:)
当我按下按钮" startStop"时,我想记录时间A,然后再次按下时记录时间B.再按一次(取消选择)必须计算这两个日期之间经过的时间。到目前为止,我有这个:
-(IBAction)buttonClick {
NSDate *startStopDate = [NSDate alloc];
NSDateFormatter *formatter= [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm:ss"];
NSString *currentTime = [[NSString alloc] init];
NSString *currentTime2 = [[NSString alloc]init];
NSDate *start =[ [NSDate alloc]init];
NSDate *stop = [[NSDate alloc] init];
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
if (startStop.selected==NO) {
NSLog(@"started");
[startStop setSelected:YES];
startStopDate = [NSDate date];
currentTime = [formatter stringFromDate:startStopDate];
NSLog(@"Current timestarted is %@",currentTime);
startTime.text = currentTime;
start = [formatter dateFromString:currentTime];
}
else {
NSLog(@"Selected");
[startStop setSelected:NO];
startStopDate = [NSDate date];
currentTime2 = [formatter stringFromDate:startStopDate];
NSLog(@"Current time is %@",currentTime2);
stopTime.text = currentTime2;
stop = [formatter dateFromString:currentTime2];
NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *components = [gregorianCalendar components:unitFlags
fromDate:start
toDate:stop
options:0];
NSInteger hours = [components hour];
NSInteger minutes = [components minute];
NSInteger seconds = [components second];
NSLog(@"hello %d, %d, %d", hours, minutes, seconds);
}
}
我的标签在按下时会给出正确的小时:分钟输出,但我似乎无法将它们转移到日期计算中。 我已经尝试过使用dateFromString和stringFromDate以及多个日期/字符串对象的多种变体,但是到目前为止我只得到大的负数或结果只有零。任何帮助赞赏;)
Greets,Nick
答案 0 :(得分:1)
那是因为start是一个局部变量。当第二次单击该按钮时,您的代码将跳过if块并直接进入else块,将start变量分配但未初始化为有用的任何内容。如果要使用它来计算开始和停止时间之间的差异,则需要将此起始值存储在本地上下文之外。