【问题标题】:How to get iOS reboot times?如何获取 iOS 重启时间?
【发布时间】:2015-11-23 05:58:49
【问题描述】:

重启次数是指当用户重启设备时,重启次数会累加一次。

那么,有没有办法可以获取 iOS 设备的重启时间?

【问题讨论】:

  • 非常奇怪的要求,但我确定 iOS 设备不会记录这一点(至少供开发人员访问)
  • @Fonix 我尝试了sysctl -A | grep reboot,但在我的 Mac 上得到了注意输出。
  • sysctl -A | grep boot 可以看到上次开机时间。

标签: ios unix reboot


【解决方案1】:

使用此方法,您可以获得系统上次重启以来的时间。

+ (time_t)getTimeSinceLastBoot {
    struct timeval boottime;
    int mib[2] = {CTL_KERN, KERN_BOOTTIME};
    size_t size = sizeof(boottime);
    time_t now;
    time_t uptime = -1;
    (void)time(&now);

    if (sysctl(mib, 2, &boottime, &size, NULL, 0) != -1 && boottime.tv_sec != 0)
    {
        uptime = now - boottime.tv_sec;
    }
    return uptime;
}

要获得确切的日期,您可以使用上述方法:

    long totalSeconds = [self getTimeSinceLastBoot];
    NSDate *dateNow = [NSDate date];
    NSDate *date = [NSDate dateWithTimeInterval:-totalSeconds sinceDate:dateNow];
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

    NSString *dateString = [formatter stringFromDate:date];

通过上述方法,您可以定期将时间保存到持久存储中的某个位置并每次检查,如果下次得到相同的时间,则表示设备尚未重新启动。如果您得到不同的时间,那么只需将该时间添加到您的数据库中。

不要忘记包含以下文件:

#include <sys/param.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/sysctl.h>
#include <sys/proc.h>
#include <sys/socket.h>

【讨论】:

  • @Tim 通过上述方法,您可以定期将时间保存到持久存储中的某个位置并每次检查,如果下次得到相同的时间,则表示设备尚未重新启动。如果您得到不同的时间,那么只需将该时间添加到您的数据库中。
  • 好方法!如果没有直接的方法来获取时间,那么保存它并检查将是另一种方式!你应该把它作为答案!
【解决方案2】:

我猜你可以通过这种方法找到重启时间间隔。

[[NSProcessInfo processInfo] systemUptime]

我在this 线程上发现了一个健康的讨论。

【讨论】:

  • 谢谢,但我不需要,我需要的是重启时间而不是实际时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2018-03-07
  • 1970-01-01
  • 2017-09-02
  • 2013-09-21
  • 1970-01-01
相关资源
最近更新 更多