38

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

MyTimeIntervalは値を保持します83.01837。に変換する必要があり83ます。私はグーグルで検索しましたが、助けが見つかりませんでした。

4

6 に答える 6

69

直接割り当て:

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
于 2012-06-20T14:12:55.137 に答える
8

ドキュメントによると、NSTimeIntervalはただのdouble

typedef double NSTimeInterval;

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

seconds = (int) myTimeInterval;

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

于 2012-06-20T14:13:56.093 に答える
7

Swift3.0の場合

let timestamp = round(NSDate().timeIntervalSince1970)

ここに画像の説明を入力してください

于 2016-09-28T04:43:44.477 に答える
6

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

于 2012-06-26T00:55:45.643 に答える
2

Swift 4、Swift 5

私は単ににキャストしInt64ます:

Int64(Date().timeIntervalSince1970)
于 2019-05-27T14:07:30.203 に答える
-2

NSDateをSwift番号に保存する必要がありました。私はうまく機能している次のキャストを使用しました。

Double(startDateTime.timeIntervalSince1970)
于 2015-08-18T14:35:16.297 に答える