2009-12-31 32 views
7

Tôi quan tâm đến việc tạo phương thức để tìm xem ngày hiện tại có nằm trong khoảng thời gian nhất định vào bất kỳ ngày cụ thể nào không. Đó là chương trình lập kế hoạch, vì vậy tôi muốn tìm sự kiện nào đang diễn ra tại thời điểm hiện tại. Mỗi ngày có cùng một khoảng thời gian: 820-900, 900-940, 940-1020, v.v. Vì điều này phải được thực hiện vào bất kỳ ngày nào tôi không biết cách tạo một NSDate với một thời điểm nhất định. Tôi nghĩ rằng điều này có thể được thực hiện với NSTimeInterval nhưng tôi không chắc chắn làm thế nào để nhanh chóng đó.NSDate giữa hai NSDates

Trả lời

26

Đây không phải là hoàn hảo, nhưng bạn có thể sử dụng [NSDate so sánh:] để kiểm tra lại ngày chống lại cả ranh giới:

NSDate *firstDate = ... 
NSDate *secondDate = ... 

NSDate *myDate = [NSDate date]; 

switch ([myDate compare:firstDate]) { 
    case NSOrderedAscending: 
     NSLog(@"myDate is older"); 
     // do something 
     break; 
    case NSOrderedSame: 
     NSLog(@"myDate is the same as firstDate"); 
     // do something 
     break; 
    case NSOrderedDescending: 
     NSLog(@"myDate is more recent"); 
     // do something 
     break; 
} 

switch ([myDate compare:secondDate]) { 
    case NSOrderedAscending: 
     NSLog(@"myDate is older"); 
     // do something 
     break; 
    case NSOrderedSame: 
     NSLog(@"myDate is the same as secondDate"); 
     // do something 
     break; 
    case NSOrderedDescending: 
     NSLog(@"myDate is more recent"); 
     // do something 
     break; 
} 

Hoặc ngắn gọn hơn:

BOOL between = NO; 

if (([myDate compare:firstDate] == NSOrderedDescending) && 
    ([myDate compare:secondDate] == NSOrderedAscending)) { 

    between = YES; 
} 

Tôi chắc chắn có một cách tốt hơn để so sánh ngày phức tạp, nhưng điều này sẽ hoạt động.

4

Xem qua - [Thành phần NSCalendar: fromDate:]. Nó sẽ cho phép bạn 'phân hủy' một ngày thành các thành phần khác nhau của nó, và sau đó bạn có thể, trong trường hợp này, nhìn vào giờ và phút.

11

Cách dễ nhất để thực hiện việc này là sử dụng -timeIntervalSinceReferenceDate để biến từng ngày của bạn thành một giá trị được nhập NSTimeInterval, thực sự chỉ là double.

NSTimeInterval rightNow = [[NSDate date] timeIntervalSinceReferenceDate]; 

Từ đó, xác định xem ngày ở giữa hai ngày nhất định có chỉ là vấn đề so sánh số đơn giản hay không.

Nếu bạn cần chuyển đổi từ một biểu diễn chuỗi của một ngày thành một cá thể NSDate để truy xuất một khoảng thời gian, hãy sử dụng NSDateFormatter.

Nếu bạn cần tạo ngày từ các thành phần ngày đã biết, hãy sử dụng NSCalendar. (nghĩa là bạn biết năm là 2010, tháng là 4 và ngày là 12, bạn có thể sử dụng các thành phần của NSCalendar để tạo một cá thể NSDate thông qua phương thức -dateFromComponents:.).

Như Ben chỉ định, giao diện phần NSCalendar có thể cũng được sử dụng để Suss ra phút giờ & để xác định xem nó là trong một phạm vi (mà dường như sẽ là một cách sử dụng điển hình trong đó nhất sự kiện không xảy ra mỗi ngày cùng một lúc ... nhưng ... chắc chắn ... cũng có lý do để làm điều đó!)

+0

không có ví dụ. :(:( – bluefloyd8