Tôi có một khoảng thời gian kéo dài nhiều năm và tôi muốn tất cả các thành phần thời gian từ năm này sang giây khác. Ý tưởng đầu tiên của tôi là số nguyên chia khoảng thời gian tính bằng giây trong một năm, trừ đi số giây đó trong tổng số giây, chia cho số giây trong một tháng, trừ số đó khỏi tổng số đang chạy và cứ như vậy.Làm cách nào để chia nhỏ NSTimeInterval thành năm, tháng, ngày, giờ, phút và giây trên iPhone?
Điều đó có vẻ phức tạp và tôi đã đọc rằng bất cứ khi nào bạn đang làm điều gì đó trông phức tạp, có thể là một phương pháp tích hợp sẵn.
Có phải không?
Tôi đã tích hợp phương thức thứ 2 của Alex vào mã của tôi.
Đó là phương thức được gọi bởi UIDatePicker trong giao diện của tôi.
NSDate *now = [NSDate date];
NSDate *then = self.datePicker.date;
NSTimeInterval howLong = [now timeIntervalSinceDate:then];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:howLong];
NSString *dateStr = [date description];
const char *dateStrPtr = [dateStr UTF8String];
int year, month, day, hour, minute, sec;
sscanf(dateStrPtr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &sec);
year -= 1970;
NSLog(@"%d years\n%d months\n%d days\n%d hours\n%d minutes\n%d seconds", year, month, day, hour, minute, sec);
Khi tôi đặt chọn ngày để hẹn hò 1 năm và 1 ngày trong quá khứ, tôi nhận được:
1 năm 1 tháng 1 ngày 16 giờ 0 phút 20 giây
cách đây 1 tháng và 16 giờ. Nếu tôi đặt bộ chọn ngày thành 1 ngày trong quá khứ, tôi sẽ giảm số tiền tương tự.
Cập nhật: Tôi có một ứng dụng tính toán tuổi của bạn trong năm, cho sinh nhật của bạn (được đặt từ UIDatePicker), nhưng nó thường bị tắt. Điều này chứng minh có một sự thiếu chính xác, nhưng tôi không thể tìm ra nó đến từ đâu, phải không?
Nếu bạn đặt chọn ngày để một ngày trước, bạn tắt bởi một tháng và mười sáu giờ ? –
có, một tháng và mười sáu giờ. – willc2
Nếu kết quả là liên tục một tháng và mười sáu giờ, bất kể bạn chọn giá trị nào, hoặc bạn trừ số đó khỏi các biến, với dịch chuyển hoặc bạn cần đánh giá lỗi đó đến từ đâu. Đoán của tôi là có điều gì đó không đúng với khoảng thời gian của bạn, nếu bạn luôn luôn đi theo số tiền đó. –