iOS 技术文档收录

iOS NSDate转成时间戳出现一年的误差

2017-04-11  本文已影响1263人  hnxyzhw

第一种方法在转时间戳时使用的格式是:YYYY-MM-dd

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"YYYY-MM-dd"];
  //从服务器拿到的时间值1451347200000,服务器上显示的时间是:29-12月-15
    NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:[date longLongValue]/1000];
    NSString *timeString = [formatter stringFromDate:confromTimesp];

打断点输出后显示的是:2016-12-29

第二种方法的时间戳格式是:yyyy-MM-dd

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];
//从服务器拿到的时间值1451347200000,服务器上显示的时间是:29-12月-15
    NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:[date longLongValue]/1000];
    NSString *timeString = [formatter stringFromDate:confromTimesp];

打断点输出后显示的是:2015-12-29

可以看到同一天打印的日期差距一年,这个bug太恶心,而且还是日期在年末的情况下才出现的。

查了下YYYY-MM-dd和yyyy-MM-dd的区别,以下仅供参考:

“YYYY format” 是 “ISO week numbering system”,“yyyy format” 是 “Gregorian Calendar”。

以后处理时间戳可要注意了要使用小写的yyyy就行了,不然这个bug可以会让你背大锅的。

上一篇下一篇

猜你喜欢

热点阅读