NSTimeIntervalを整数値に変換するにはどうすればよいですか?
MyTimeIntervalは値を保持します83.01837
。に変換する必要があり83
ます。私はグーグルで検索しましたが、助けが見つかりませんでした。
NSTimeIntervalを整数値に変換するにはどうすればよいですか?
MyTimeIntervalは値を保持します83.01837
。に変換する必要があり83
ます。私はグーグルで検索しましたが、助けが見つかりませんでした。
直接割り当て:
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ビット整数。)これらは、honking-big integer値(-2 ^ 63〜2 ^ 63 -1)を格納できます。
long long integerSeconds = round([NSDate timeIntervalSinceReferenceDate]);
NSIntegerは、少なくとも今後数十年の間、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)
NSDateをSwift番号に保存する必要がありました。私はうまく機能している次のキャストを使用しました。
Double(startDateTime.timeIntervalSince1970)