【问题标题】:Calculate time elapsed between pressing the same button twice计算两次按下同一个按钮之间经过的时间
【发布时间】:2012-04-10 13:31:39
【问题描述】:

我一直在尝试计算我在这个网站上找到的示例,但不知何故,我每次都得到 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 以及多个日期/字符串对象进行多种变体,但到目前为止,我只得到大的负数或结果为零。任何帮助表示赞赏;)

你好,尼克

【问题讨论】:

    标签: ios5 nsdate nsdateformatter nscalendar nsdatecomponents


    【解决方案1】:

    那是因为 start 是一个局部变量。当第二次单击该按钮时,您的代码将跳过 if 块并直接转到 else 块,从而分配 start 变量但未初始化任何有用的变量。如果要使用它来计算开始时间和停止时间之间的差异,则需要将此开始值存储在本地上下文之外。

    【讨论】:

    • 当然啦!我是如此专注于那一段代码,以至于我完全忘记了我在其中!我的断点显示他们有相同的日期,但我首先搜索最困难的可能性,而不是合乎逻辑的可能性......谢谢您的快速回复;)
    • 没问题,我知道那种感觉。介意接受正确的答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2021-06-15
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多