An NSTimeInterval
, như tên của nó, um, ngụ ý, không đại diện giống như một số NSDate
. An NSDate
là thời điểm trong thời gian. Khoảng thời gian là khoảng thời gian. Để có được một điểm từ một khoảng thời gian, bạn phải có một điểm khác. Câu hỏi của bạn cũng giống như hỏi "Làm cách nào để chuyển đổi 12 inch thành một điểm trên bảng này mà tôi đang cắt?" Vâng, 12 inch, bắt đầu từ từ nơi?
Bạn cần chọn ngày tham chiếu. Điều này rất có thể là NSDate
đại diện cho thời gian bạn bắt đầu bộ đếm. Sau đó, bạn có thể sử dụng +[NSDate dateWithTimeInterval:sinceDate:]
hoặc -[NSDate dateByAddingTimeInterval:]
Điều đó nói rằng, tôi chắc chắn bạn đang nghĩ về điều này ngược. Bạn đang cố gắng hiển thị thời gian đã trôi qua kể từ một số điểm bắt đầu, tức là, khoảng thời gian , không phải thời gian hiện tại. Mỗi khi bạn cập nhật màn hình, bạn chỉ nên sử dụng khoảng thời gian mới. Ví dụ (giả sử bạn có một bộ đếm thời gian bắn theo định kỳ để làm bản cập nhật):
- (void) updateElapsedTimeDisplay: (NSTimer *)tim {
// You could also have stored the start time using
// CFAbsoluteTimeGetCurrent()
NSTimeInterval elapsedTime = [startDate timeIntervalSinceNow];
// Divide the interval by 3600 and keep the quotient and remainder
div_t h = div(elapsedTime, 3600);
int hours = h.quot;
// Divide the remainder by 60; the quotient is minutes, the remainder
// is seconds.
div_t m = div(h.rem, 60);
int minutes = m.quot;
int seconds = m.rem;
// If you want to get the individual digits of the units, use div again
// with a divisor of 10.
NSLog(@"%d:%d:%d", hours, minutes, seconds);
}
Nguồn
2011-11-01 19:54:58
hoàn hảo! đúng thứ tôi cần! – hfossli