2010-07-02 107 views
0

有人能帮我从hr:min:sec形式的时间计算中解脱出来。但我确实需要系统时间。这对我做了这个代码如何计算hr:min:sec中的时间

我尽量让时间计算人力资源的形式:分:秒 ,但它不能在正确的方式工作&((1)后 的(它的工作直到有小时)在3600秒输出为1:1:00之后61秒输出为0:1:71(3)之后60秒输出为0:1:60,但在3601秒输出错误之后(3)

下面是代码:

在.m文件

-(IBAction)start 
{  
    timer1 = [NSTimer scheduledTimerWithTimeInterval:(.01) target:self selector:@selector(timepassed) userInfo:nil repeats:YES];   
} 

-(void)timepassed 
{ 
    counter++; 
    if(sec==60) 
     sec=0; 
    else 
     sec=counter/100; 

    if(min==60) 
     min=0; 
    else 
     min=sec/60; 

    if(hr==24) 
     hr=0; 
    else 
     hr=min/60; 

    m1++; 
    NSString *l=[NSString stringWithFormat:@"%i:%i:%i",hr,min,sec]; 

    [m setText:l]; 
} 
+1

NSTimers不够准确,无法完成您在这里要做的事情,我建议不要将它们用于此目的。 – 2010-07-02 13:29:12

+0

我同意约书亚。相反,使用NSDate记录开始时间,然后调用timeIntervalSinceNow来查看已经过了多少时间。 – Brian 2010-07-02 13:35:25

+0

我同意diff'ing时间戳更准确。但是,这种方法可以确保你得到一个不会错过心跳的连续计数器。这可能会或可能不会是一件好事。 – Eiko 2010-07-02 13:46:26

回答

2
-(void) timepassed 
{ 
    counter++; 
    if (counter == 60) { secs++; counter = 0; } 
    if (secs == 60) { min++; secs = 0; } 
    if (min == 60) { hr++; min = 0; } 

    // Your usual output here 
} 

请记住,它设置了与您的代码不同的计数器变量,即它只存储从0到99的1/100秒。

有一些算法将时间转换为hrs:mins:secs,这只是其中一个与您的代码类似的算法。

附注:请接受对您有帮助的答案(也是针对您的旧问题),这是本网站的常见行为,并保持人们的积极性来帮助您。