2011-03-16 37 views
9

Kimsenin yöntemimle bana yardım edip edemeyeceğini bilmek isterim.NSDate yuvarlamadan saniyeyi sıfırlama

2011-03-16 18:21:43 +0000 

döndürür:

2011-03-16 18:22:00 +0000 
problem, bir tarih iletilir

- (NSDate *)dateWithZeroSeconds:(NSDate *)date { 
    NSTimeInterval time = round([date timeIntervalSinceReferenceDate]/60.0) * 60.0; 
    return [NSDate dateWithTimeIntervalSinceReferenceDate:time]; 
} 

: Aşağıdaki yöntemi, bir NSDate nesnesinin saniye değeri sıfır dışında olacak sahip

Bu yuvarlaklaştırmanın gerçekleşmesini istemiyorum, çünkü aslında tarihi belirten bir kullanıcı olduğundan, istedikleri dakikaya kadar kesin olmalıdır.

Her türlü yardım büyük beğeni topluyor.

cevap

29

Kullanım kat:

- (NSDate *)dateWithZeroSeconds:(NSDate *)date 
{ 
    NSTimeInterval time = floor([date timeIntervalSinceReferenceDate]/60.0) * 60.0; 
    return [NSDate dateWithTimeIntervalSinceReferenceDate:time]; 
} 
+0

+1 NSDateComponents ile uğraşmaktan daha az iş olabilir. Saniyeler yerine dakikalar veya saatler sıfırlamak istediğinizde işe yaramazdı, ancak saniyeler içinde bir NSDate'in temel birimi olduğundan bu işlem tamamdır. – Caleb

+2

Artık saniye geçmez: http://en.wikipedia.org/wiki/Leap_second –

+1

@DarcyRayner: Cocoa'nın API'sı NTP'yi temel alır, böylece yerleşik API'lerin hiçbiri artık saniye saniye içermez. – dreamlax

24

Tarihin bölümlerini almak için NSCalendar ve NSDateComponents kullanın. Saniye bileşenini 0 olarak ayarlayın ve daha sonra bu NSDateComponents öğesinden yeni bir tarih oluşturun. yerine yuvarlak bir

+0

çok yararlı Değil ile Bunu yapmak için kodu aramayı bitir. –

+5

@WilliamT. Bir cevabın, yardımcı olmak için kesmek ve yapıştırmanız için kod snippet'leri sağlaması gerekmez. Doğru yaklaşımı bilmek, yetkin bir Objective-C programcısı, arama yapmak yerine gerekli kodu * yazacaktır. – Caleb

5

tam olması için, burada NSCalendar ve NSDateComponents kullanarak iOS SDK 8.1 başvurulan koddur.

iOS 8'den itibaren takvim birimi adlarının değiştiğini unutmayın. @Neil cevap

+0

Teşekkürler bu bana yardımcı olur! – Tommy

1

Swift 2.2 sürümü: Herhangi bir zaman biriminin başlangıç ​​alabilirsiniz

func truncateSecondsForDate(fromDate: NSDate) -> NSDate { 

    let calendar : NSCalendar = NSCalendar.currentCalendar() 
    let unitFlags : NSCalendarUnit = [.Era , .Year , .Month , .Day , .Hour , .Minute] 
    let fromDateComponents: NSDateComponents = calendar.components(unitFlags, fromDate: fromDate) 

    return calendar.dateFromComponents(fromDateComponents)! 

} 
2

- Böyle bir dakika olarak - biz hala zorunda rangeOfUnit:startDate:interval:forDate:

NSDate *startOfMinuteDate; 
[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitMinute 
           startDate:&startOfMinuteDate 
           interval:NULL 
            forDate:originalDate];