问题:
今天线上产品,突然无法正常获取数据,测试这边反馈过来,之前都是好好的,起初大概看了下前端代码,请求数据的时候入参都是正确的,但还是一直获取不到后台数据,以为是后台哪里出了问题(这里注意啦我看了前端代码确实是没有问题,差点就把锅扣给了后台),但是后台小伙伴也表示检查了代码和接口,并没有发现问题,那么问题可能还是存在前端入参上面,仔细检查后发现确实是自己的锅(深深的对后台小伙伴道歉,再摸摸头),入参的时候时间参数整整多了一年,明明是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];
}
网友评论