2012-04-25 22 views
26

Ở đây tôi đang cố gắng tính giờ giữa hai ngày. Khi tôi chạy ứng dụng, nó bị treo. Bạn có thể vui lòng cho tôi biết lỗi trong mã này không?Sự khác biệt về giờ giữa hai NSDate

NSString *lastViewedString = @"2012-04-25 06:13:21 +0000"; 
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat: @"yyyy-MM-dd HH:mm:ss zzz"]; 

NSDate *lastViewed = [[dateFormatter dateFromString:lastViewedString] retain]; 
NSDate *now = [NSDate date]; 

NSLog(@"lastViewed: %@", lastViewed); //2012-04-25 06:13:21 +0000 
NSLog(@"now: %@", now); //2012-04-25 07:00:30 +0000 

NSTimeInterval distanceBetweenDates = [now timeIntervalSinceDate:lastViewed]; 
double secondsInAnHour = 3600; 
NSInteger hoursBetweenDates = distanceBetweenDates/secondsInAnHour; 

NSLog(@"hoursBetweenDates: %@", hoursBetweenDates); 
+3

NSLog (@ "hoursBetweenDates:% d", hoursBetweenDates); – adali

+1

Không có ý nghĩa khi kết hợp các thay đổi giải quyết vấn đề của bạn vào mã của câu hỏi. Sau đó chỉnh sửa mã của bạn đã không bị rơi nữa, vì vậy tôi đã làm một rollback cho phiên bản gốc của câu hỏi. –

+0

Bật cảnh báo trong trình biên dịch của bạn. Có một lỗi nghiêm trọng, và với các cảnh báo được bật, trình biên dịch sẽ nói với bạn về nó. – gnasher729

Trả lời

11

Tôi nghĩ rằng sự khác biệt nên về giá trị int ...

NSLog(@"hoursBetweenDates: %d", hoursBetweenDates); 

Hope, điều này sẽ giúp bạn ..

+0

có bạn đúng, Cảm ơn bạn Nit – shebi

11

Đề cập đến this answer of a mostly similar question một tốt hơn và Apple đã được phê duyệt cách sẽ sử dụng các phương pháp NSCalendar như thế này:

- (NSInteger)hoursBetween:(NSDate *)firstDate and:(NSDate *)secondDate { 
    NSUInteger unitFlags = NSCalendarUnitHour; 
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [calendar components:unitFlags fromDate:firstDate toDate:secondDate options:0]; 
    return [components hour]+1; 
} 

Nếu bạn nhắm mục tiêu iOS 8 trở lên sử dụng NSCalendarIdentifierGregorian thay vì không dùng nữa NSGregorianCalendar.

Các vấn đề liên quan