【发布时间】:2013-06-22 14:37:25
【问题描述】:
我需要将当前日期/时间与用户选择的日期/时间进行比较。 下面是我的代码sn-p
-(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;但它不能正常工作。有什么办法可以做到这一点?
请指教。 谢谢
【问题讨论】:
-
添加显示两个日期字符串的日志语句。这样您就可以准确地看到正在比较的内容。顺便说一句 - 如果您比较两个
NSDate对象而不是两个日期字符串,那会更好。 -
如果您坚持使用日期字符串,则使用 2 位数的小时会有所帮助。使用
HH而不是H。 -
嗨,我 NSLog 两个日期是 2013-06-26 1:23(当前日期)和 2013-06-28 9:25(用户选择的日期)。按道理它不应该进入 if 语句。
-
您可以通过多种方式比较日期。显然,如果您比较字符串,则必须确保字符串中的字段按重要性顺序排列。此外,您需要确保它们的宽度相同,以便在“9:00”之后比较“10:00”(通过将“9:00”扩展为“09:00”)。如果您不小心,使用格式化的日期可能会被locale "feature" 咬住。但是比较 NSDate 对象也有一些缺陷。
-
嗨,比较两个日期的最佳方法是什么?希望确保用户不会选择早于当前日期/时间的日期/时间。
标签: objective-c nsdate