2009-02-24 28 views
11

Tôi đang tìm hai làm hai việc:Làm thế nào để kiểm tra ngày nào trong tuần là (ví dụ: Thứ Ba, Thứ Sáu?) Và so sánh hai NSDates?

  1. Kiểm tra nếu một tuần đã trôi qua (dựa trên các ngày trong tuần)
  2. Kiểm tra nếu một ngày đã trôi qua (dựa trên ngày)

Tôi không chắc cách tốt nhất để giải quyết vấn đề này là gì, vì khi so sánh hai NSDates (một tại 1/1/09 lúc 21:30 và một tại 1/2/09 lúc 00:30) tôi không thể chỉ nhìn thấy nếu 24 giờ đã trôi qua kể từ trong trường hợp này nó đã không. Tôi có thể giải quyết điều này bằng cách chỉ nhận ngày 1/1/09 từ NSDate, nhưng tôi không chắc chắn làm thế nào để làm điều này dựa trên tài liệu và các liên kết google mà tôi đã thấy.

Đối với vấn đề khác, tôi không biết làm thế nào để biết ngày nào trong tuần được đưa ra một ngày. Tôi muốn nếu 1/1/09 là Thứ Ba, Thứ Hai, vv ... Có thư viện nào cho phép bạn tính toán điều này không? Điều này rõ ràng cần phải đưa vào tài khoản năm nhuận và một tấn công cụ khác ... Có lẽ có một thư viện khách quan-c cho điều này?

Cảm ơn bạn đã trợ giúp!

Trả lời

13

Bạn có thể sử dụng NSDateComponents cho việc này:

unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [gregorian components:units fromDate:date]; 

sau đó bạn có thể truy cập vào từng phần của ngày như thế này:

[components year]; 
[components month]; 
[components day]; 

Hoặc, bạn có thể xây dựng một đối tượng NSDate mới sử dụng NSCalendar 's dateFromComponents và so sánh hai đối tượng NSDate.

30

Bạn có thể sử dụng components:fromData: nhắn của lớp NSCalendar để có được các thành phần ngày cá nhân:

// Sunday = 1, Saturday = 7 
int weekday = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:theDate] weekday]; 

Để so sánh hai ngày, chỉ cần sử dụng compare: nhắn:

switch([date1 compare:date2]) 
{ 
case NSOrderedSame:  /* they are the same date */ break; 
case NSOrderedAscending: /* date1 precedes date2 */ break; 
case NSOrderedDescending: /* date2 precedes date1 */ break; 
} 
Các vấn đề liên quan