2012-03-20 48 views
11

Ok, tôi đã thực hiện việc này trong một vài ngày và bị kẹt. Những gì tôi đang cố gắng làm là so sánh thời gian hiện tại với một thời gian định trước. Điều tôi muốn xảy ra là, Hàng ngày vào những thời điểm nhất định, tôi muốn mã nhất định kích hoạt, nhưng không phải trước thời điểm trong ngày mà tôi chỉ định.NSDate, so sánh hai ngày

vì vậy, về cơ bản nếu "thời gian hiện tại" giống hoặc bằng "thời gian xác định trước" thì hãy kích hoạt mã này. Hoặc kích hoạt dòng mã này.

Nghe có vẻ đơn giản, nhưng tôi gặp khó khăn khi so sánh hai lần.

Tôi đã định dạng một chuỗi đến một ngày như vậy

 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); 

sau đó tôi lấy thời gian hiện tại như vậy

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

SO làm thế nào để so sánh hai lần này? Tôi đã thử tất cả mọi thứ tôi có thể nghĩ đến, xin vui lòng giúp đỡ.

Trả lời

21

Bạn có thể thử các dòng mã dưới đây không?

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

Nhưng trong trường hợp của bạn tôi nghĩ rằng bạn cần phải giữ cả ngày trong cùng một định dạng ..or một số điều như thế này

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]; 

và làm so sánh giữa dateOne và dateTwo.

0

Giả sử vấn đề của bạn thực sự so sánh hai đối tượng NSDate, hãy thử kiểm tra câu hỏi được liên kết bên dưới; nó có một số gợi ý tốt;

How to compare two dates in Objective-C

3

Hãy thử điều kiện này:

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

     //do want you want 
}