根据 官方文档NSDateFormatter, 用户非24小时时间制(设置>通过>日期和时间>24小时制),这会导致 NSDateFormatter 重写您设置的格式字符串,这可能会导致时间解析失败(时间戳转换为 0)。
解决办法:在给NSDateFormatter设置 locale,官方推荐使用地区identifier:en_US_POSIX
//时间字符串转时间戳(毫秒),适配12/24小时制,formatStr 默认为@"yyyyMMdd HH:mm"
- (NSString *)getTimeStampWith:(NSString *)timeStr withFormar:(NSString *)formatStr{
if (formatStr.length==0){
formatStr = @"yyyyMMdd HH:mm";
}
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatStr];
//强制更改为24小时制
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
NSDate *localDate2 = [dateFormatter dateFromString:timeStr];
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)([localDate2 timeIntervalSince1970] * 1000)];
return timeSp;
}