美文网首页
时间和时间戳的互相转换

时间和时间戳的互相转换

作者: Gary_Kwok | 来源:发表于2016-12-24 16:06 被阅读0次

    一般时间戳的长度是13位。

    1.精确到秒code
    NSDate *localDate = [NSDate date]; //获取当前时间

    NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[localDate timeIntervalSince1970]]; //转化为UNIX时间戳

    NSLog(@"timeSp:%@",timeSp); //时间戳的值

    2.精确到毫秒code
    NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:0];

    NSTimeInterval a=[dat timeIntervalSince1970]*1000; // *1000 是精确到毫秒,不乘就是精确到秒

    NSString *timeString = [NSString stringWithFormat:@"%f", a]; //转为字符型
    ​​//注:不想有小数点用%.0f​就OK啦

    NSLog(@"timeString:%@",timeString); //时间戳的值

    3.时间戳转成时间data (如果时间戳是13位,在转换前先除以1000变成10位)

    NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:1363948516]; NSLog(@"1363948516 = %@",confromTimesp); //之后就可以对NSDate进行格式或处理

    --------// 时间戳NSString 转成 时间NSString -------
    NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:[dict[@"time"] doubleValue]];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm"];
    NSString *dateTime = [formatter stringFromDate:confromTimesp];

    ​知识补充
    4、 Unix 时间戳为什么是自 1970 年 1 月 1 日起的绝对时间? 那么,1970年之前的时间如何用Unix时间戳表示?

    1、 因为Unix就是那个时代产生的。

    Unix是1969年发布的雏形,最早是基于硬件60Hz的时间计数。

    1971年底出版的《Unix Programmer's Manual》里定义的Unix Time是以

    1971年

    1月1日00:00:00作为起始时间,每秒增长60。

    之后考虑到32位整数的范围,如果每秒60个数字,则两年半就会循环一轮了。于是改成了以秒为计数单位。

    这个循环周期有136年之长,就不在乎起始时间是1970还是1971年了,于是就改成了人工记忆、计算比较方便的1970年了。

    (详见:http://en.wikipedia.org/wiki/Unix_time#History

    2、因为unix时间戳是一个有符号整数,所以1970年前一百年可以用其负数部分表示。

    但事实上很少这要使用。因为unix时间戳主要用来表示当前时间或者和电脑有关的日志时间(如文件创立时间,log发生时间等)。
    

    考虑到所有电脑文件不可能在1970年前创立,所以用unix时间戳很少用来表示1970前的时间。

    当需要表示以前的时间,一般就是自己定义数据结构。比如你可以用几个数分别表示年月日,或者像excel中用1900年1月1日后的天数表示时间。

    相关文章

      网友评论

          本文标题:时间和时间戳的互相转换

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