2012-01-13 27 views
5

Tarihleri ​​atlama süresi arasında fark almak istiyorum, eğer bir tarih 13 Ocak 2012 - 23:00 ve diğer tarihler 14 Ocak 2012 - 12:00 ise, fark 1 gün değil 0 gün olmalıdır. Yani, tarih arasındaki farkı görmek istiyorum sadece 14 Ocak 2012 - 13 Ocak 2012, atlama zamanı. Farkı hesaplamak için NSDate api kullanabileceğimi biliyorum ama sorun da zaman göz önüne aldım.Adım fark hesaplanırken zaman atlayacağım ama NSDateFormatter kullanmam durumunda zamanın nasıl geçeceğini bilmiyorum çünkü dize tarih vermeyeceğim. Lütfen bana ne yapabilirim?NSDate'te zaman atlama nasıl?

Şimdiden teşekkürler!

cevap

7

Yapmanız gereken, önce her bir tarihin NSDateComponents olmasını sağlamaktır. Bunu yaptıktan sonra, fark yaratmak için 'gün' bileşenini karşılaştırabilirsiniz.

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
NSDate *date1 = ....; 
NSDate *date2 = ....; 
NSDateComponents *comps1 = [cal components:NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date1]; 
NSDateComponents *comps2 = [cal components:NSDayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit fromDate:date2]; 

date1 = [cal dateFromComponents:comps1]; 
date2 = [cal dateFromComponents:comps2]; 

NSDateComponents *diffComps = [cal components:NSDayCalendarUnit fromDate:date1 toDate:date2 options:0]; 

NSLog(@"Days diff = %d", diffComps.day); 

tarih API garip başınızın etrafında sarmak için olabilir, ancak bunu bir kez oldukça güçlüdür.

+0

Yıl veya ay farkı olup olmadığı hakkında bir fikir var mı? –

+0

Bunu işlemek için kodu düzeltildi. –

+0

Bu soruyu sorduğum için üzgünüm ama gerçekten anlamıyorum, "initWithCalendarIdentifier" nedir? –