美文网首页iOS 知识点
iOS之获取时间戳

iOS之获取时间戳

作者: KODIE | 来源:发表于2017-05-13 00:03 被阅读87次

    导读:

    iOS时区、时间格式NSDate、时间戳

    一、背景简介

    一般我们在请求后台数据的时候,会习惯性的加个时间戳,那么什么是时间戳呢?时间戳就是从1970年1月1日开始计时到现在所经过的时间。

    二、获取代码
    • 获取秒数
    // 以下这个结果是10位数,interval得出的数会有6位小数,应该是精确到微秒
    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970];
    NSInteger time = interval;
    NSString *timestamp = [NSString stringWithFormat:@"%zd",time];
    

    打印结果如下:

    interval  = 1494583488.766226
    time      = 1494583488
    timestamp = 1494583488
    
    • 获取毫秒数
    // 有些要求时间精准一点,就是毫秒级别的
    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] * 1000;
    NSInteger time = interval;
    NSString *timestamp = [NSString stringWithFormat:@"%zd",time];
    

    打印结果如下:

    // interval打印是按照%lf打印的,会有6位小数的
    interval  = 1494583607781.295166
    time      = 1494583607781
    timestamp = 1494583607781
    
    • 获取微秒数
    // 有些要求时间再精准一点,就是微秒级别的
    NSTimeInterval interval = [[NSDate date] timeIntervalSince1970] * 1000000;
    NSInteger time = interval;
    NSString *timestamp = [NSString stringWithFormat:@"%zd",time];
    

    打印结果如下:

    // interval打印是按照%lf打印的,会有6位小数的
    interval  = 1494583674040832.000000
    time      = 1494583674040832
    timestamp = 1494583674040832
    

    注意:为了防止溢出,基本上时间戳传给后台或者后台返回给我们的都是字符串类型的。

    扩展


    拿到当前的时间date:

    NSDate *date = [NSDate date];
    NSLog(@"date = %@",date);
    

    打印结果如下:

    2017-08-18 21:48:30.151130+0800 DifferenceTimeDemo[13529:6656910] date = Fri Aug 18 21:48:30 2017
    

    但是如果其中打印的时候有夹扎着中文的话,如下,并且默认时区是0时区:

    NSDate *date = [NSDate date];
    NSLog(@"date时间 = %@",date);
    

    打印结果如下:

    2017-08-18 21:58:23.574113+0800 DifferenceTimeDemo[13546:6661209] date时间 = 2017-08-18 13:58:23 +0000
    

    PS: 加了中文打印的话就会按照中国这边的习惯来格式化时间


    根据date来格式化时间

    NSDate *date = [NSDate date];
    NSLog(@"date时间 = %@", date);
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    NSString *dateStr = [formatter stringFromDate:date];
    NSLog(@"字符串时间 = %@", dateStr);
    

    打印结果如下:

    2017-08-18 22:01:28.330967+0800 DifferenceTimeDemo[13549:6662914] 字符串时间 = 2017-08-18 22:01:28 +0800
    

    PS: 一般格式化都会按照如下来设置的,Z表示时区,一般不会加

    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    

    PS: 默认一般是按照当地的时区来格式化的,如果特殊设置了时区的话,如下:

    //东八区时间
    formatter.timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
    

    具体请参见:iOS时区、时间格式NSDate、时间戳,作者写的很好啊!以上!!!

    嘬奶.gif

    相关文章

      网友评论

        本文标题:iOS之获取时间戳

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