美文网首页ios developers
学习笔记:iOS的时间汇总

学习笔记:iOS的时间汇总

作者: 双鱼子曰1987 | 来源:发表于2021-06-21 16:39 被阅读0次

    一、概述

    • GMT:Greenwich Mean Time缩写,表示格林尼治的时间基准。
    • UTC:Coordinated Universal Time 缩写,表示原子钟时间基准。

    二、iOS的各种时间api区别

    2.1、第一种受系统时间影响,可能会被用户修改

    • NSDate,以UTC为标准,和时区和文化无关。

    • CFAbsoluteTimeGetCurrent(),以GMT为标准,等同于 [[NSDate date] timeIntervalSinceReferenceDate]

    • gettimeofday,获取的是Unix time(是以UTC为基准时间,当前时间距离基准点偏移的秒数)。

    • sysctl,可获取上次设备重启的Unix time时间。

    2.2、第二种不受系统时间影响,与CPU计数有关

    • mach_absolute_time(),CPU已经运行的tick的数量,可达到纳秒级的精度。
      在每次手机重启之后,会重新开始计数;且iPhone锁屏进入休眠之后tick也会暂停计数。

    • CACurrentMediaTime(),内部使用mach_absolute_time()并转化成秒,只受设备重启和休眠影响。

    /* Returns the current CoreAnimation absolute time. This is the result of
     * calling mach_absolute_time () and converting the units to seconds. */
    CA_EXTERN CFTimeInterval CACurrentMediaTime (void)
    

    三、使用场景

    1、显示当前系统时间

    一般使用NSDate即可,结合NSDateFormatter转化为不同显示格式的时间。

    2、代码执行时间测量

    主要考虑两个要求:1、精读要高;2、API本身几乎不耗CPU时间。
    基于上面两点,更合适的选择是mach_absolute_time(),精度到毫秒即可 。

    3、客户端和服务器的时间同步

    • 常用算法:currSvrTime = lastSvrTime + (currlocalTime - lastLocalTime)
      应用本地时间的获取,可以选择不受用户修改影响的mach_absolute_time() 或者 CACurrentMediaTime()

      注意:另种一种本地时间算法(待验证)


      image.png

    参考

    iOS关于时间的处理

    相关文章

      网友评论

        本文标题:学习笔记:iOS的时间汇总

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