美文网首页
iOS开发之时间戳和时间互转-年份出错

iOS开发之时间戳和时间互转-年份出错

作者: chasitu | 来源:发表于2020-12-10 11:55 被阅读0次

    今天遇到一个很少见的错误,时间戳转换出错了,同一个时间戳进去转换之后返回的日期比原来的日期多了一年,就是年份加了1,我们从头开始剖析

    正常的时间戳和时间相互转换是这样的

    1. 时间转时间戳
    /*!
     *时间转时间戳
     */
    + (NSString *)TimeToTimestampWtihString:(NSString *)time
    {
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateStyle:NSDateFormatterMediumStyle];
        [formatter setTimeStyle:NSDateFormatterShortStyle];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
        [formatter setTimeZone:timeZone];
        NSDate *datenow = [formatter dateFromString:time];
        NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]];
        return timeSp;
    }
    
    1. 时间戳转时间(使用当地时区)
    /*!
     *时间戳转时间(使用当地时区)
     */
    + (NSString *)TimestampToTimeWtihString:(NSString *)timestamp Format:(NSString *)format
    {
        if (timestamp.length == 13) {
            timestamp = [NSString stringWithFormat:@"%ld",timestamp.integerValue/1000];
        }
        if (format.length == 0) {
            format = @"YYYY-MM-dd HH:mm";
        }
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateStyle:NSDateFormatterMediumStyle];
        [formatter setDateFormat:format];
        [formatter setTimeZone:[NSTimeZone localTimeZone]];
        NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp.doubleValue];
        NSString *timeStr = [formatter stringFromDate:date];
        return timeStr;
    }
    

    我们输入的是2020年12月31日的时间戳然后我们得到的结果是这样的

    解决:把NSDateFormatter里面的YYYY修改成yyyy就可以了

    我们看完结果再剖析一下原因;对于年份来说,大写的Y和小写的y其意义是不同的。

    • y 是Year,
    • Y 表示的是Week year

    经过试验,得出的结果如下:Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年,就这样

    相关文章

      网友评论

          本文标题:iOS开发之时间戳和时间互转-年份出错

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