2009-03-17 41 views
13

Tôi có hai thời gian trong định dạng:% H% M% S (E.G.161500)Tính chênh lệch thời gian trong Cocoa

Các giá trị này là số nguyên dựa trên văn bản.

Có một hàm đơn giản trong Cocoa để tính toán sự khác biệt giữa hai số nguyên này sử dụng thang đo 60 giây và phút không?

Vì vậy, nếu

time 1 = 161500 
time 2 = 171500 

timedifference = 003000 

Trả lời

33
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"HHmmss"]; 

NSDate *date1 = [dateFormatter dateFromString:@"161500"]; 
NSDate *date2 = [dateFormatter dateFromString:@"171500"]; 

NSTimeInterval diff = [date2 timeIntervalSinceDate:date1]; // diff = 3600.0 
10

Lớp cho những ngày thao tác là NSDate. Phương pháp nhận khoảng thời gian là -timeIntervalSinceDate:. Kết quả là giá trị NSTimeInterval, là giá trị double đại diện cho khoảng thời gian tính bằng giây.

Bạn có thể tạo một đối tượng NSDate từ một NSString với +dateWithString:, với điều kiện là ngày bạn được định dạng như 2001-03-24 10:45:32 +0600.

+1

Và nếu nó không phải là, bạn có thể nhanh chóng một NSDateFormatter với chuỗi định dạng cần thiết. –

+0

Điều này rất hữu ích. Cảm ơn bạn. – Jirapong

1

Tôi sẽ tạo phân lớp NSFormatter để phân tích giá trị thời gian ở định dạng đó từ dữ liệu đầu vào (bạn có thể đặt một giá trị trên trường văn bản để tự động chuyển đổi đầu vào của người dùng hoặc sử dụng nó để phân tích cú pháp từ nguồn dữ liệu trong mã). Có nó trả về số giây kết hợp như là một NSTimeInterval (đôi đại diện giây) được bọc trong một NSNumber. Từ đó thật dễ dàng để trừ đi sự khác biệt và hiển thị nó bằng cách sử dụng cùng lớp NSFormatter mà bạn đã tạo. Trong cả hai phân tích và hiển thị các giá trị, bạn là người chịu trách nhiệm viết mã chuyển đổi từ giây thành giờ: phút: giây hoặc bất kỳ định dạng nào bạn muốn. Bạn cũng có thể chuyển đổi các giá trị này thành một NSDate như mouviciel được đề cập, nếu nó có ý nghĩa đối với ứng dụng của bạn. Chỉ cần ghi nhớ bạn luôn luôn sẽ được lưu trữ sự khác biệt thời gian từ một ngày tham khảo, thường là ngày 1 tháng 1 năm 1970 (NSDate có phương pháp để làm điều này cho bạn).

4

thử mã này.

- (NSTimeInterval)intervalBetweenDate:(NSDate *)dt1 andDate:(NSDate *)dt2 { 

NSTimeInterval interval = [dt2 timeIntervalSinceDate:dt1]; 
NSLog(@"%f",interval); 
return interval; 

}

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