我正在检查一个给定的日期和时间。时间已经过了当前日期&时间。这是我做过的事情
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?
答案 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) {
...
}