NSTimeInterval
をNSDate
に変換するにはどうすればよいですか?ストップウォッチのようなものだと考えてください。最初の日付を00:00:00にしたいのですが、NSTimeInterval
はX秒です。
NSTimeInterval
は、lround
を使用して切り上げてintに変換し、次にNSDate
に変換してNSDateFormatter
を文字列にスローします。
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);
}
簡単な変換を次に示します。
NSDate * now = [NSDate date];
NSTimeInterval tiNow = [now timeIntervalSinceReferenceDate];
NSDate * newNow = [NSDate dateWithTimeIntervalSinceReferenceDate:tiNow];
オレKホルネス
時間間隔を表示する場合は、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];
NSDate
オブジェクトに最初の日付を保存している場合は、将来の任意の間隔で新しい日付を取得できます。単にdateByAddingTimeInterval:
このような:
NSDate * originalDate = [NSDate date];
NSTimeInterval interval = 1;
NSDate * futureDate = [originalDate dateByAddingTimeInterval:interval];
経由 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
NSTimeInterval
から NSDate
Swiftでの変換:
let timeInterval = NSDate.timeIntervalSinceReferenceDate() // this is the time interval
NSDate(timeIntervalSinceReferenceDate: timeInterval)