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

2020-12-10  本文已影响0人  chasitu

今天遇到一个很少见的错误,时间戳转换出错了,同一个时间戳进去转换之后返回的日期比原来的日期多了一年,就是年份加了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其意义是不同的。

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

上一篇下一篇

猜你喜欢

热点阅读