使用nsdate比较两个日期

时间:2011-10-26 09:47:49

标签: iphone ios nsdate

在我的应用程序中,我必须比较两次:当前(即12:44)并且考虑到我尝试过:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"hh:mm"];
NSDate *neededDate = [[NSDate alloc] init];
neededDate = [dateFormatter dateFromString:@"14:45"];
if ([neededDate compare:[NSDate date]] == NSOrderedAscending) {
NSLog(@"yes");
} else NSLog(@"no");
[neededDate release];
[dateFormatter release];

但是每当我启动它时,NSLog会说“不”。请,建议我错了。先感谢您。

3 个答案:

答案 0 :(得分:2)

因为您的neededDate将等于"1970/01/01 14:45"

您需要设置正确的年份和日期。

例如,您可以使用下一种方法获取当前年份和月份:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[NSDate date]];
NSLog(@"Current year: %d", components.year);
NSLog(@"Current month: %d", components.month);
NSLog(@"Current day: %d", components.day);

答案 1 :(得分:0)

我认为问题在于:

[dateFormatter setDateFormat:@"hh:mm"];

应该是:

[dateFormatter setDateFormat:@"HH:mm"];

因为现在为“14:45”它返回(null)日期

(这是以前的答案:)

答案 2 :(得分:0)

这意味着在您的情况下,requiredDate始终高于当前日期。 这可能是因为您以24小时格式存储了48小时的字符串。 将字符串更改为HH:mm

另外,验证您在requiredDate中存储的值。

这是一个小例子

NSDate *neededDate = [[NSDate date] dateByAddingTimeInterval:5];
    if ([neededDate compare:[NSDate date]] == NSOrderedAscending) {
        NSLog(@"asc");
    } else {
        NSLog(@"dec");
    }

在这种情况下,将打印dec。