NSDate比较总是返回NSOrderedAscending

时间:2016-06-30 04:27:22

标签: objective-c nsdate

我正在检查一个给定的日期和时间。时间已经过了当前日期&时间。这是我做过的事情

NSString *End = [[values objectAtIndex:index]valueForKey:@"EndTime"];

fmt.dateFormat = @"yyyy-MM-dd hh:mm:ss";
    utc = [fmt dateFromString:End];
    NSDate *endDateInLocalTimezone = [utc dateByAddingTimeInterval:timeZoneSeconds];
    fmt.dateFormat = @"MMMM dd, hh:mm a";
    endDateInLocalTimezone = [fmt stringFromDate:endDateInLocalTimezone];

    NSDate *now = [NSDate date];
    now = [fmt stringFromDate:now];


    if([endDateInLocalTimezone compare:now] == NSOrderedAscending)
    {
        index++;
        continue;
    }

我得到 7月03日,下午5:29 endDateInLocalTimezone 并将其与 now 比较 6月30日,12日:晚上18点。它仍然说是在NSOrderedAscending中,这意味着左操作数小于右操作数。但在给定的情况下,右操作数小于左操作数。为什么它仍然进入if?

1 个答案:

答案 0 :(得分:0)

您正在比较日期对象的字符串再现,而不是日期对象本身。比较日期,而不是字符串。

例如:

NSString *dateString = values[index][@"EndTime"];

formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];           // the EndTime is in GMT/UTC, tell you formatter that
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; // you generally should make sure to use `en_US_POSIX` in case user is not using gregorian calendar
NSDate *date = [fmt dateFromString:dateString];

NSDate *now = [NSDate date];

if ([date compare:now] == NSOrderedAscending) {
    ...
}