美文网首页
iOS 计算 设备开机时间 与 腾讯手机助手核对过

iOS 计算 设备开机时间 与 腾讯手机助手核对过

作者: JonesCxy | 来源:发表于2018-06-11 15:43 被阅读61次
    • NSProcessInfo 计算的开机时间不准确
    • 具体哪里不准确呢?
    • 举个例子:项目中需要展示开机时间,一开始使用NSProcessInfo计算的,没有发现意外,但是上线被拒,根据苹果反馈的截图,说不准确,我卸掉 app并且关机重启,经过多次测试,与腾讯手机助手一对比,确实在特殊情况下会出现不一致的情况(我的出现错误),打比方:10:00开的机,将手机锁屏,等到10:08分时,在打开手机,发现我的开机时间变为了10:03分,而不是10:00开的机,最后收集相关资料发现,确实会出现这样的错误,是因为手机处于休眠状态时,不会计时,导致我拿到的开机时间->现在的时间间隔变小,再往前推算开机时间,就会发生错误.
    // 不准确
        NSProcessInfo * processInfo = [NSProcessInfo processInfo];
         //Get the uptime of the system
        NSTimeInterval UptimeInterval = [processInfo systemUptime];
        NSLog(@"----%f",UptimeInterval);
        NSDate *updateDate = [NSDate dateWithTimeIntervalSinceNow:-UptimeInterval];
        NSString *updateDateString = [NSDate jk_stringWithDate:updateDate format:@"YYYY-MM-dd HH:mm:ss"];
    
    • 正确方式
    // 计算开机时间
    +(NSTimeInterval) bootTime{
        struct timeval t;
        size_t len=sizeof(struct timeval);
        if(sysctlbyname("kern.boottime",&t,&len,0,0)!=0)
            return 0.0;
        return  t.tv_sec+t.tv_usec/USEC_PER_SEC;
    }
    // 类型转化
    + (NSString *)timeIntervalToFormat:(NSTimeInterval)localTimeInterval{
        time_t timeInterval = (time_t)localTimeInterval;
        struct tm *time = localtime(&timeInterval);
        NSString *timeStr = [NSString stringWithFormat:@"%d-%02d-%02d %02d:%02d:%02d",time->tm_year + 1900,time->tm_mon + 1,time->tm_mday,time->tm_hour,time->tm_min, time->tm_sec];
        return timeStr;
    }
    
    ``

    相关文章

      网友评论

          本文标题:iOS 计算 设备开机时间 与 腾讯手机助手核对过

          本文链接:https://www.haomeiwen.com/subject/ojdheftx.html