【问题标题】:Is any way for Retrieving current date and time without using [NSDate date]是否可以在不使用 [NSDate date] 的情况下检索当前日期和时间
【发布时间】:2015-11-10 05:26:26
【问题描述】:

我做了一个应用程序,我需要显示一个 30 分钟的倒数计时器,30 分钟后我需要显示优惠券已过期。它工作正常。

{    
NSInteger seconds = [[NSDate date] timeIntervalSinceDate:dateDue];
}

但是如果有人更改移动日期或时间,计时器会受到干扰并且显示错误的值。所以这是不使用 [NSDate date] 来查找当前日期和时间的任何方法,所以我使用它是我的倒数计时器。请提出您的建议..

【问题讨论】:

    标签: ios objective-c nsdate


    【解决方案1】:

    您正在寻找的是CACurrentMediaTime()。或mach_absolute_time()

    【讨论】:

    • CACurrentMediaTime() 不是计时器。它是系统中最准确的时间函数的包装器:mach_absolute_time()。因此,如果您真的很关心现在是什么时间,并且您希望它是人类可以理解的数字,那么 CACurrentMediaTime() 就是您的函数。 mach_absolute_time() 会给你一个非常准确的数字,但它基于马赫绝对时间单位,它实际上并没有映射到人类认为的任何讨厌的东西(并且每个 CPU 都有不同的比例)。这就是为什么我们有 CACurrentMediaTime() 让我们的生活更轻松。
    【解决方案2】:

    目标 c 的核心就是 c;您可以使用任何标准的符合 ansi-c 标准的方法,例如:

    time_t time;
    struct tm * timeinfo; 
    time (&time);
    timeinfo = localtime (&time);
    

    现在您有了当地的时间表示,您可以了解以下详细信息:

    Year:  "timeinfo->tm_year+1900;"
    Month: "timeinfo->tm_mon+1;"
    Date:  "timeinfo->tm_mday;"
    Hour:  "timeinfo->tm_hour;"
    Mins:  "timeinfo->tm_min;"
    Secs:  "timeinfo->tm_sec;"
    

    这次是本地时间;要获取 GMT 时间,请将 localtime() 调用替换为 gmtime()。

    感谢来源:https://stackoverflow.com/a/31646117/2748303

    黑客愉快!

    编辑:看起来您真正想要的是计数器开始时的绝对 epoc 时间戳,以及计数器结束时的时间戳。

    在这种情况下,我会使用:

    time_t now = time(0);
    

    返回自 epoc 以来的毫秒数,并适当地进行比较。

    【讨论】:

    • 感谢您的宝贵时间,但我的问题是我需要一个日期时间,即使移动用户从设置中更改时间或日期也不会受到影响,因此我可以根据该日期时间运行我的倒计时。用于倒数计时器的日期,一个是启动时间,另一个是当前时间,我在两个日期之间取不同的时间并显示该计时器
    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    相关资源
    最近更新 更多