NSTimeIntervalを整数値に変換するにはどうすればよいですか?
私のTimeIntervalは83.01837
という値を保持します。 83
に変換する必要があります。 Googleで検索しましたが、ヘルプが見つかりませんでした。
直接割り当て:
NSTimeInterval interval = 1002343.5432542;
NSInteger time = interval;
//time is now equal to 1002343
NSTimeIntervalはdoubleであるため、NSInteger(または必要に応じてint)に直接割り当てると機能します。これにより、時刻が最も近い秒に切り捨てられます。
(切り捨てるのではなく)最も近い秒に丸めたい場合は、割り当てを行う前に丸めを使用できます。
NSTimeInterval interval = 1002343.5432542;
NSInteger time = round(interval);
//time is now equal to 1002344
ドキュメント によると、NSTimeInterval
は単なるdouble
です:
typedef double NSTimeInterval;
これをint
にキャストできます:
seconds = (int) myTimeInterval;
ただし、オーバーフローに注意してください!
NSDateのNSTimeInterval値はNSIntegerからオーバーフローすると思われます。おそらく長い間欲しいでしょう。 (64ビット整数。)ホーンキングの大きな整数値(-2 ^ 63〜2 ^ 63 -1)を格納できます。
long long integerSeconds = round([NSDate timeIntervalSinceReferenceDate]);
NSIntegerのように見えます[〜#〜] can [〜#〜] NSTimeIntervalを少なくとも次の数十年間保存します。現在の日付のtimeIntervalSinceReferenceDateは、約519,600,000、または約2 ^ 28です。 32ビットデバイスでは、NSIntegerは-2 ^ 31〜2 ^ 31-1の値を保持できます。 (2 ^ 31は2,147,483,648です
Swift 4 Swift 5
私は単にInt64
:
Int64(Date().timeIntervalSince1970)