开发中常常遇到对某个日期与当前日期进行比较,在对日期格式进行转换时不注意容易忽视时区差异,日期转换的时间是北京时间,而通过[NSDate date]获取到的是格林尼治时间,存在8个小时的误差存在
在时区的设置调整可以通过以下:[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];
//或者
dateFormattersetTimeZone:[NSTimeZone timeZoneWithAbbreviation:@“UTC”]];
#pragma mark -- 比较指定日期是否在当前日期之前
- (BOOL)checkProductDate:(NSString *)tempDate {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSDate *date = [dateFormatter dateFromString:tempDate];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *tempDataComponents = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date];
NSInteger y = [tempDataComponents year]; // year
NSInteger m = [tempDataComponents month]; // month
NSInteger d = [tempDataComponents day]; // day
NSDate *todayDate = [NSDate date];
NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:todayDate];
NSInteger ty = [components year]; // year
NSInteger tm = [components month]; // month
NSInteger td = [components day]; // day
if (y > ty) {
return NO;
}
if (y == ty && m > tm) {
return NO;
}
if (y == ty && m == tm && d >= td) {
return NO;
}
return YES;
}