2011-11-01 5 views
15

NSTimeIntervalNSDateに変換するにはどうすればよいですか?それをストップウォッチのように考えてください。私は最初の日付を00:00:00にしたいと思います。NSTimeIntervalのX秒です。NSDateへのNSTimeInterval

NSTimeIntervalニーズが文字列にそれをスローするようにNSDateFormatterを使用するNSDateに変換し、その後、切り上げるlroundを使ってint型に変換されるので、私はこのようにそれを行う必要があります。

答えて

32

NSTimeIntervalは、その名前のとおり、NSDateと同じものではありません。 NSDateは、時刻がのです。時間間隔は、時間のストレッチです。ある区間からポイントを取得するには、別のポイントが必要です。あなたの質問は、 "私はこのボード上の場所に12インチをどのように変換するのですか?"という質問に似ています。さて、12インチ、開始ここから

参照日付を選択する必要があります。これは、カウンタを開始した時刻を表すNSDateである可能性が最も高いです。次に使用できる+[NSDate dateWithTimeInterval:sinceDate:]または-[NSDate dateByAddingTimeInterval:]

これは、私があなたがこれについて後方に考えていると確信しています。開始時刻から経過した時間、つまりの間隔が現在の時刻ではなく、であることを表示しようとしています。ディスプレイを更新するたびに、新しい間隔を使用してください。例えば、(あなたが更新を行うために、定期的に発射タイマーを持っていると仮定します):

- (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); 
} 
6

あなたはNSDateオブジェクトに格納されているあなたの最初の日付を持っている場合は、新しい日付に将来の任意の間隔を得ることができます。単純にこのようなdateByAddingTimeInterval:を使用します。

NSDate * originalDate = [NSDate date]; 
NSTimeInterval interval = 1; 
NSDate * futureDate = [originalDate dateByAddingTimeInterval:interval]; 
12

私はあなたが時間間隔を表示したい場合はNSDateFormatterを使用しないことをお勧めします。 NSDateFormatterは、時刻をローカルまたは特定のタイムゾーンに表示する場合に便利です。しかしこの場合、時間帯が調整されていれば(例えば1年に1日が23時間)、バグが発生します。

NSTimeInterval time = ...; 
NSString *string = [NSString stringWithFormat:@"%02li:%02li:%02li", 
               lround(floor(time/3600.)) % 100, 
               lround(floor(time/60.)) % 60, 
               lround(floor(time)) % 60]; 
+0

完璧!ちょうど私が必要なもの! – hfossli

14

簡単に変換から、バックがここに示されています:

NSDate * now = [NSDate date]; 
NSTimeInterval tiNow = [now timeIntervalSinceReferenceDate]; 
NSDate * newNow = [NSDate dateWithTimeIntervalSinceReferenceDate:tiNow]; 

オレK Hornnes

2

経由apple developers

// 1408709486 - 時間間隔値

NSDate *lastUpdate = [[NSDate alloc] initWithTimeIntervalSince1970:1408709486]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 

NSLog(@"date time: %@", [dateFormatter stringFromDate:lastUpdate]); 

あなたは: 日時:2014年8月22日、Aug 22、3:11:26 PM

0

Joshが正しい方法を答えたので、間隔をNSDate形式にしたい場合は、以下の方法を使用できますスウィフトで

+ (NSDate *) dateForHour:(int) hour andMinute: (int) minute{ 
    NSDateComponents * components = [NSDateComponents new]; 
    components.hour = hour; 
    components.minute = minute; 
    NSDate * retDate = [[NSCalendar currentCalendar] dateFromComponents:components]; 
return retDate;} 
0

NSTimeIntervalNSDateへの変換:

let timeInterval = NSDate.timeIntervalSinceReferenceDate() // this is the time interval 
NSDate(timeIntervalSinceReferenceDate: timeInterval)