Nasıl iPhone üzerinde yıl, ay, gün, saat, dakika ve saniye içine bir NSTimeİnterval yıkmak mı?
Yayılan yıllık bir zaman aralığı var ve saniye için aşağı her zaman yılın bileşenleri istiyorum.
İlk aklıma gelen olduğu için tamsayı bölme zaman aralığını saniye içinde bir yıl, çıkarma bir çalışan toplam saniye, bölen tarafından saniye bir ay, çıkarma dan çalışan toplam.
Sadece kıvrık ve kıvrık gibi görünen bir şey yaptığınız zaman, muhtemelen bir yerleşik yöntem olduğunu okudum.
Orada mı?
Alex 2. benim koda entegre yöntemi.
Bir yöntem arayüzü benim bir UİDatePicker tarafından çağrıldı.
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);
Tarihi tarihi 1 yıl geçmiş ve 1 gün için seçici başladığımda anladım:
1 yıl 1 ay 1 gün 16 saat 0 dakika 20 saniye
1 ay ve 16 saat kapalı olan. Eğer tarih geçmişte 1 gün için seçici kurdum, aynı miktarda duyuyorum.
Güncelleme: Doğum günün belirli yıllarda yaşınız hesaplayan bir uygulama var (bir UİDatePicker kümesi), henüz çoğu kapalı idi. Bu bir yanlışlık olduğunu kanıtlıyor, ama nereden geldiğini çözemedim.
CEVAP
Kısa Açıklama
Sadece başka bir yaklaşım JBRWilkinson ama bazı kodlar ekleyerek cevap tamamlamak için. Ayrıca Alex Reynolds yorum için bir çözüm sunuyor.
NSCalendar yöntemi kullanın:
(NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
"Bir NSDateComponents belirtilen bileşenleri kullanarak nesne olarak, verilen iki tarih arasındaki farkı döndürür". (API belgelerine).
Yıkmak istediğiniz NSTimeİnterval olan 2 NSDate oluşturun. (NSTimeİnterval bu adımı yapmanıza gerek yok 2 NSDate karşılaştırılması söz konusu bile NSTimeİnterval lazım, sadece geçerli NSCalendar yöntemi tarihleri).
NSDateComponents, teklifleri alın
Örnek Kod
// The time interval
NSTimeInterval theTimeInterval = ...;
// Get the system calendar
NSCalendar *sysCalendar = [NSCalendar currentCalendar];
// Create the NSDates
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1];
// Get conversion to months, days, hours, minutes
NSCalendarUnit unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
NSDateComponents *breakdownInfo = [sysCalendar components:unitFlags fromDate:date1 toDate:date2 options:0];
NSLog(@"Break down: %i min : %i hours : %i days : %i months", [breakdownInfo minute], [breakdownInfo hour], [breakdownInfo day], [breakdownInfo month]);
Nasıl dakika bir NSTimeİnterval (saniy...
kaç gün saat dakika saniye içine 27092...
Nasıl iPhone SDK üzerinde etkin bir İn...
Nasıl Java "X dakika x saniye&quo...
Nasıl iphone-sdk üzerinde base64 kodla...