代码大量使用了NSDateFormatter,NSDateFormatter的创建比较消耗性能,如果需要多处使用,最好通过单例的方式来创建,防止多次创建消耗性能
#import "KDateFormatter.h"
static KDateFormatter *_instanceType = nil;
@implementation KDateFormatter
+ (instancetype)sharedDateFormatter{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instanceType = [[KDateFormatter alloc]init];
});
return _instanceType;
}
@end
另外,利用strptime函数来进行转换的方法也可降低消耗。
- (NSDate *)dateFromISO8601StringDateFormatter:(NSString *)string{
if (!string) {
return nil;
}
struct tm tm;
time_t t;
strptime([string cStringUsingEncoding:NSUTF8StringEncoding], "%Y-%m-%d %H:%M:%S", &tm);
tm.tm_isdst = -1;
t = mktime(&tm);
return [NSDate dateWithTimeIntervalSince1970:t + [[NSTimeZone localTimeZone] secondsFromGMT]];
}
- (NSString *)ISO8601String:(NSDate*)date {
struct tm *timeinfo;
char buffer[80];
//这里计算秒的时候,实际时间跟北京时间相差8小时,所以要加8*60*60秒
time_t rawtime = [date timeIntervalSince1970] - [[NSTimeZone localTimeZone] secondsFromGMT] + 8*60*60;
timeinfo = localtime(&rawtime);
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", timeinfo);
return [NSString stringWithCString:buffer encoding:NSUTF8StringEncoding];
}
网友评论