问题总结

iOS YYYY-MM-dd 和 yyyy-MM-dd 时间转换

2020-01-08  本文已影响0人  Cingjin

问题:

今天线上产品,突然无法正常获取数据,测试这边反馈过来,之前都是好好的,起初大概看了下前端代码,请求数据的时候入参都是正确的,但还是一直获取不到后台数据,以为是后台哪里出了问题(这里注意啦我看了前端代码确实是没有问题,差点就把锅扣给了后台),但是后台小伙伴也表示检查了代码和接口,并没有发现问题,那么问题可能还是存在前端入参上面,仔细检查后发现确实是自己的锅(深深的对后台小伙伴道歉,再摸摸头),入参的时候时间参数整整多了一年,明明是2019-12-29为什么变成了2020-12-29,然后仔细检查时间转换代码哪里发现了问题,时间转换的时候用的YYYY-MM-dd导致时间转换多了一年时间,之前一直没有注意过这个细节问题!

问题总结:

YYYY-MM-dd 和 yyyy-MM-dd 使用问题

IMG_7160-20200108-100928-

1、"YYYY format" 是 "ISO week numbering system" 是按照周来计算时间,今天是12月29号周天,是2020年的第一周所以年份开始就是进入了2020年了

2、"yyyy format" 是 “Gregorian Calendar” 是按天数作为一年的计算单位

出现这种问题一般都是在特定时间、特定环境出问题的情况比如年末,注意这里 mm 和MM HH和hh在使用的时候也是有区别的,记录一下这个问题希望能帮助看到这篇文章的童鞋,在以后使用的时候注意该细节,避免以后在这种小细节上犯错!

贴一个时间转换工具:


//NSDate转NSString
+ (NSString *)cj_stringFromDate:(NSDate *)date Formatter:(NSString * _Nullable )str {
    str = str == nil?@"yyyy-MM-dd HH:mm:ss":str;
    //用于格式化NSDate对象
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //设置格式:zzz表示时区
    [dateFormatter setDateFormat:str];
    //NSDate转NSString
    NSString *currentDateString = [dateFormatter stringFromDate:date];
    //输出currentDateString
    return currentDateString;
}

//NSString转NSDate
+ (NSDate *)cj_dateFromString:(NSString *)datestring Formatter:(NSString * _Nullable )str {
    str = str == nil?@"yyyy-MM-dd HH:mm:ss":str;
    //设置转换格式
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;
    [formatter setDateFormat:str];
    //NSString转NSDate
    NSDate *date=[formatter dateFromString:datestring];
    //get seconds since 1970
    NSTimeInterval interval = [date timeIntervalSince1970];
    int daySeconds = 24 * 60 * 60;
    //calculate integer type of days
    NSInteger allDays = interval / daySeconds;
    return [NSDate dateWithTimeIntervalSince1970:allDays * daySeconds];
}
上一篇下一篇

猜你喜欢

热点阅读