iOS时间相关

作者: NapoleonY | 来源:发表于2018-01-05 22:00 被阅读17次

    时间

    1. GMT:格林尼治时间
      理论上讲,格林尼治时间的正午是太阳横穿格林尼治子午线的时间,作为世界各地区交流的的标准时间使用。由于地球转速改变,导致GMT不再作为标准时间使用
    2. UTC:协调世界时,由原子钟提供,作为现在的标准时间使用。

    iOS时间相关

    • NSDate以UTC为参考,代表从2001年1月1号00:00:00到当前时刻的时间间隔。编程语言描述时间时,通常都是以一个时间点为参考时间,加上时间的偏移量,得到另一个时间点

      //[NSDate date]获取本地当前时间 
      double time = [[NSDate date] timeIntervalSinceReferenceDate];
      //537110663.983146秒,
      //537109844.576690/86400/365=17.031667年
      //[[NSDate date] timeIntervalSince1970];
      

      timeIntervalSinceReferenceDate表示当前时刻相对于参考时间的时间间隔。上述代码中86400为1天的秒数,17刚好是从2001年到现在的年数。
      要将NSDate转换为具体的时间格式,需要借助于NSDateFormatterNSTimeZone

      • NSDateFormatter:NSDate借助于NSDateFormatter以特定的格式输出。
      • NSTimeZone:计算某个地区的时间(上海/纽约等)
      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
      NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
      [dateFormatter setTimeZone:timeZone];
      NSString *dateStr = [dateFormatter stringFromDate:[NSDate date]];
      //2018-01-08 21:48:26
      

      备注:NSDate受手机时间系统控制,即用户修改了手机的时间后,NSDate的输出也会改变,因此NSDate并不可靠

    • CFAbsoluteTimeGetCurrent()
      类似于NSDate,只不过参考时间为GMT 2001年1月1号 00:00:00,单位为秒
      备注:CFAbsoluteTimeGetCurrent()也受到手机时间系统控制,用户修改手机时间后,输出也会改变,也不可靠

    • mach_absolute_time()
      返回CPU已经运行的时钟周期的数量,由于时钟周期是匀速变化的,因此可以将时钟周期转换为时间,秒、纳秒等。
      备注:当手机重启,CPU的时钟周期会重置,手机休眠,时钟周期也会暂停计数。因此,mach_absolute_time()不会受到系统时间影响,但是会受到手机的休眠或重启影响

    • CACurrentMediaTime()
      将上面mach_absolute_time()返回的时钟周期转换成秒数。

       #import <Quartz/Quartz.h>
       double timeNew = CACurrentMediaTime();
       //20217.420085为设备开机到当前时刻的秒数,不包括中间设备休眠的时间
      

    获取当前时间,精确到毫秒

    - (void)getcurrentTimeMS {
        NSDateFormatter *timeFormtter = [[NSDateFormatter alloc] init];
        [timeFormtter setDateFormat:@"YYYY-MM-dd hh:mm:ss:SSS"];
        NSString *dateNow = [timeFormtter stringFromDate:[NSDate date]];
        NSString *timeNow = [[NSString alloc] initWithFormat:@"%@", dateNow];
        NSLog(@"time:%@", timeNow);
    }
    

    参考

    1. iOS关于时间的处理

    相关文章

      网友评论

        本文标题:iOS时间相关

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