web-dev-qa-db-ja.com

NSTimeIntervalをintに変換する方法は?

NSTimeIntervalを整数値に変換するにはどうすればよいですか?

私のTimeIntervalは83.01837という値を保持します。 83に変換する必要があります。 Googleで検索しましたが、ヘルプが見つかりませんでした。

34

直接割り当て:

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
62
Aaron Hayman

ドキュメント によると、NSTimeIntervalは単なるdoubleです:

typedef double NSTimeInterval;

これをintにキャストできます:

seconds = (int) myTimeInterval;

ただし、オーバーフローに注意してください!

8
Emil Vikström

In Swift 3.0

let timestamp = round(NSDate().timeIntervalSince1970)

enter image description here

7
AP_

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です

6
Duncan C

Swift 4 Swift 5

私は単にInt64

Int64(Date().timeIntervalSince1970)
0
RaffAl