今天遇到一个很少见的错误,时间戳转换出错了,同一个时间戳进去转换之后返回的日期比原来的日期多了一年,就是年份加了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;
}
- 时间戳转时间(使用当地时区)
/*!
*时间戳转时间(使用当地时区)
*/
+ (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 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年,就这样
网友评论