我是iOS编程的新手,我一直在寻找一种方法来比较“今天”(NSDate)和格式化的字符串日期(dd / MM / yyyy) .
我've found some good answers with the NSDate' s earlierDate
, laterDate
等,但代码似乎在我的项目中不起作用 .
这里是 :
// [book quandd] is the string : 25/02/2011 (or whatever dd/MM/yyyy date)
NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd/MM/yyyy"];
if ( [[dateFormat dateFromString:[book quandd]] isEqualToDate:today]) {
NSLog(@"Dates are equal");
}
if ( [[dateFormat dateFromString:[book quandd]] earlierDate:today]) {
NSLog(@"earlier");
}
if ( [[dateFormat dateFromString:[book quandd]] laterDate:today]) {
NSLog(@"later");
}
无论我做什么,无论 [book quandd]
中的日期如何,控制台总是写"earlier"和"later",好像它们比今天更早,更早 .
那个“虫子”来自哪里?
例如,有一些简单/更简单的方法来比较今天的日期和26/02/2011吗?
5 回答
使用
timeIntervalSinceNow:
从必要的日期获取差异 .您还应尝试获取它们之间的差异,然后转换为字符串 .
NSDate包括日期和时间 . 没有两个NSDate值是相等的,除非时间相同,直到毫秒(如果不是更精细) . 当你执行
[NSDate date]
时,你会获得"now"的确切时间,而如果使用NSDateFormatter将字符串转换为日期(没有时间值),则使用午夜 .如果您想查看同一天是否有两个NSDates,您可以使用NSCalendar和NSDateComponents . 或者你可以“欺骗”并将两个日期格式化为没有时间值的日期字符串并比较字符串 .
用这个
您需要使用其中一个日期检查earlyDate的返回值 . 例如:if([date1 earlyDate:date2] == date1)
您的“错误”发生是因为laterDate和earlyDate返回的是更早或更晚的日期对象 . 返回对象始终是非空的,因此if语句都评估为true . 使用它们的正确方法是这样的:
或者,我使用了timeIntervalSinceDate,它返回第一个日期和第二个日期之间的秒数 .