1

現在、次を使用して、2 つのイベント間の時間を 10 進数で記録しています。

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *dateComponents =  [calendar components:unitFlags fromDate:date];

CGFloat hour = [dateComponents hour];
CGFloat minute = [dateComponents minute];
CGFloat second = [dateComponents second];

//set start time in decimal minutes
CGFloat startTime = ((hour*3600.0)+(minute*60.0)+(second))*.016666;

//do work...

//set end time in decimal minutes
CGFloat endTime = ((hour*3600.0)+(minute*60.0)+(second))*.016666;

//calculate time elapsed in decimal minutes
CGFloat totalTime = endTime-startTime;

私が抱えている問題は、実際には時間を秒単位で取得してから、10 進数の分に変換していることです。したがって、取得している値は0.016663(10 進分で 1秒)、 0.033325(10 進分で 2 秒)、 0.049988(10 進分で 3 秒) などだけです。間に値はありません。より正確な時間を取得する方法はありますか? NSDateComponentsプロパティがあるかどうかを確認しましたmillisecondが、何も見つかりませんでした。

ありがとう!

4

4 に答える 4

6

また、 CFAbsoluteTimeGetCurrent()を使用することもできます。これは、秒単位および秒未満の時間を含む double を返します。

CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();

その後、経過時間を秒単位および分数単位で計算できます。

elapsed = CFAbsoluteTimeGetCurrent() - startTime;

NSLog(@"Elapsed Time: %0.3f seconds", elapsed);

アプリのデリゲートと最初のビュー コントローラーの viewDidAppear にデバッグ コード (#ifdef DEBUG) を配置して、経過した起動時間を報告し、開発中に監視できるようにしたいと考えています。

于 2011-08-25T23:03:06.873 に答える
2

NSDateを使用しないのはなぜですか?

NSDate *date1, *date2;
NSTimeInterval timeInSeconds;

date1 = [NSDate date];

// Do work

date2 = [NSDate date];
timeInSeconds = [date2 timeIntervalSinceDate:date1];

// Or, without using date2:

timeInSeconds = -[date1 timeIntervalSinceNow];

これにより、測定の精度が 1 秒未満になるはずです。

于 2011-08-25T21:23:31.487 に答える
1

Unix-y を取得したい場合は、gettimeofday(参照)を使用できます。

struct timeval tv;
gettimeofday(&tv, NULL);
NSLog(@"seconds: %d, microseconds: %d\n", tv.tv_sec, tv.tv_usec);

#import <sys/time.h>必ずファイルに追加してください

于 2011-08-25T21:34:55.263 に答える