我需要将当前日期/时间与用户选择的日期/时间进行比较。 以下是我的代码段
-(IBAction)btnSaveTouched:(id)sender {
NSDate *today = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd H:mm"];
NSString *formatterDate = [formatter stringFromDate: today];
NSComparisonResult comparisionResult1 = [self.paramSchedule1StartSQLDateString compare:formatterDate];
if (comparisionResult1 == NSOrderedAscending) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Viewing schedule must be after current time." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
return;
}
NSLog(@"comparisionResult1 %d", comparisionResult1);
}
点击btnSaveTouched(UIButton)后,日期/时间将存储到数据库中并返回到屏幕。 (查看用户选择日期/时间的控制器)
但是,当我尝试比较其他日期/时间时,即使我选择的日期/时间晚于当前日期/时间,也会显示提醒。
NSLog之后的comparsionResult1,值为1,第二次检查总是。 我试着做这个NSComparsionResult comparisionResult1 = 0;但它不能正常工作。有什么方法可以做到这一点吗?
请指教。 感谢
答案 0 :(得分:10)
需要注意的日期之间的比较,特别是如果你与NSString比较,你必须确保两个日期都安排好了,你需要小心两种格式。所以我建议你比较两个NSDate。 样品:
NSDate *date1 = //…
NSDate *date2 = //…
switch ([date1 compare:date2]) {
case NSOrderedAscending:
//Do your logic when date1 > date2
break;
case NSOrderedDescending:
//Do your logic when date1 < date2
break;
case NSOrderedSame:
//Do your logic when date1 = date2
break;
}
当然,您可以为NSDate实现一个类别。但是已经存在了,我想使用这个:NSDate Category,你可以根据需要编辑和自定义。
答案 1 :(得分:2)
尝试使用此代码进行日期之间的任何比较...您不应该以字符串的形式比较日期。将转换前的日期与字符串进行比较。使用格式化程序的self.paramSchedule1StartSQLDateString
函数将dateFromString
转换为日期格式,方法是将日期格式指定为dateString的格式。然后使用以下函数比较日期。
NSDate *today = [NSDate date]; // current date
NSDate *newDate = self.paramSchedule1StartSQLDateString; // other date
NSComparisonResult result;
result = [today compare:newDate]; // comparing two dates
if(result == NSOrderedAscending)
NSLog(@"today is less");
else if(result == NSOrderedDescending)
NSLog(@"newDate is less");
else if(result == NSOrderedSame)
NSLog(@"Both dates are same");
else
NSLog(@"Date cannot be compared");
答案 2 :(得分:2)
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date1 = [dateFormatter dateFromString:TodayDate];
NSDateFormatter *dateFormatte = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatte setDateFormat:@"yyyy-MM-dd"];
NSDate *date2 = [dateFormatte dateFromString:CompareDate];
unsigned int unitFlags = NSDayCalendarUnit;
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [gregorian components:unitFlags fromDate:date1 toDate:date2 options:0];
int days = [comps day];
NSLog(@"%d",days);