web-dev-qa-db-ja.com

NSTimeIntervalからNSDate

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

NSTimeIntervalは、lroundを使用して切り上げてintに変換し、次にNSDateに変換してNSDateFormatterを文字列にスローします。

16
Baub

NSTimeIntervalは、その名前umが意味するように、NSDateと同じものを表していません。 NSDateは、時間のモーメントです。時間間隔は時間のストレッチです。間隔からポイントを取得するには、別のポイントが必要です。あなたの質問は、「私がカットしているこのボード上のスポットに12インチをどのように変換するのですか?」さて、12インチ、どこから開始

参照日を選択する必要があります。これはおそらく、カウンターを開始した時刻を表すNSDateです。次に +[NSDate dateWithTimeInterval:sinceDate:] または -[NSDate dateByAddingTimeInterval:]

とは言っても、あなたはこれについて逆に考えていると思います。現在の時刻ではなく、開始点からの経過時間、つまりintervalを表示しようとしています。表示を更新するたびに、新しい間隔を使用する必要があります。たとえば、更新を行うために定期的にタイマーが作動するとします。

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

簡単な変換を次に示します。

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

オレKホルネス

15
olekeh

時間間隔を表示する場合は、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];
12
Mats

NSDateオブジェクトに最初の日付を保存している場合は、将来の任意の間隔で新しい日付を取得できます。単にdateByAddingTimeInterval: このような:

NSDate * originalDate = [NSDate date];
NSTimeInterval interval = 1;
NSDate * futureDate = [originalDate dateByAddingTimeInterval:interval];
6
Alex Nichol

経由 Apple開発者

// 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日15:11:26 PM

2
Vlad

NSTimeInterval から NSDate Swiftでの変換:

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