NSDate,比较两个日期

时间:2012-03-20 04:43:09

标签: iphone ios sdk nsdate

好的,我已经在这几天工作了,而且我被卡住了。我想要做的是将当前时间与预定时间进行比较。我想要发生的是,每天在某些时候我想要触发某些代码,但不是在我指定的时间之前。

所以,基本上如果“当前时间”等于或等于“预定时间”,则触发此代码。或者解雇这行代码。

听起来很简单,但我在抓两次比较时遇到了麻烦。

我已将字符串格式化为类似日期

     NSString* dateString = @"11:05 PM";
        NSDateFormatter* firstDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
        [firstDateFormatter setDateFormat:@"h:mm a"];
        [firstDateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
        NSDate* date = [firstDateFormatter dateFromString:dateString];
        NSLog(@"date %@",date);

然后我像这样抓住当前时间

   NSDate *currentTime = [NSDate dateWithTimeIntervalSinceNow:[[NSTimeZone localTimeZone]     secondsFromGMT]];
NSDateComponents* comps = [[NSCalendar currentCalendar] 
                           components: NSHourCalendarUnit |NSMinuteCalendarUnit 
                                |NSSecondCalendarUnit fromDate:currentTime];
 [[NSCalendar currentCalendar] dateFromComponents:comps];

那我怎么比较这两次呢?我已经尝试了所有我能想到的,请帮忙。

3 个答案:

答案 0 :(得分:21)

您可以尝试以下代码行吗?

switch ([dateOne compare:dateTwo]){
     case NSOrderedAscending:
          NSLog(@"NSOrderedAscending");
    break;
    case NSOrderedSame:
          NSLog(@"NSOrderedSame");
    break;
    case NSOrderedDescending:
         NSLog(@"NSOrderedDescending");
    break;
}

但在你的情况下,我认为你需要保持两个日期的格式相同..或者像这样的事情

 NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:[NSDate date]];
    [components setHour:23];//change your time to 24hrs formate 
    [components setMinute:05];
    [components setSecond:00];


    NSDate *dateOne = [[NSCalendar currentCalendar] dateFromComponents:components];

    components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:[NSDate date]];

     NSDate *dateTwo = [[NSCalendar currentCalendar] dateFromComponents:components];

并在dateOne和dateTwo之间进行比较。

答案 1 :(得分:3)

试试这个条件:

if ([date compare:currentTime]==NSOrderedSame) {

         //do want you want
}

答案 2 :(得分:0)

假设您的问题实际上是在比较两个NSDate对象,请尝试查看下面链接的问题;它有一些很好的指示;

How to compare two dates in Objective-C