如何将NSTimeInterval转换为int?

Pra*_*ypa 36 iphone integer nstimeinterval ios

如何将NSTimeInterval转换为Integer值?

我的TimeInterval保存了该值83.01837.我需要把它转换成83.我用Google搜索但找不到任何帮助.

Aar*_*man 63

直接分配:

NSTimeInterval interval = 1002343.5432542;
NSInteger time = interval;
//time is now equal to 1002343
Run Code Online (Sandbox Code Playgroud)

NSTimeInterval是一个double,所以如果你直接将它分配给一个NSInteger(或int,如果你愿意的话)它就可以了.这将截止时间缩短到最接近的秒数.

如果你希望舍入到最接近的秒(而不是切断它),你可以在作出任务之前使用round:

NSTimeInterval interval = 1002343.5432542;
NSInteger time = round(interval);
//time is now equal to 1002344
Run Code Online (Sandbox Code Playgroud)

  • 实际上,圆形是更好的,因为它可以正常使用负数而不是预期,同时添加.5或数字不... (5认同)

Emi*_*röm 8

根据文档,NSTimeInterval只是一个double:

typedef double NSTimeInterval;
Run Code Online (Sandbox Code Playgroud)

您可以将其转换为int:

seconds = (int) myTimeInterval;
Run Code Online (Sandbox Code Playgroud)

但请注意溢出!


AP_*_*AP_ 7

在Swift 3.0中

let timestamp = round(NSDate().timeIntervalSince1970)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Dun*_*n C 6

我怀疑来自NSDate的NSTimeInterval值会溢出NSInteger.你可能想要很长时间.(64位整数.)那些可以存储鸣喇叭大整数值(-2 ^ 63到2 ^ 63 -1)

long long integerSeconds = round([NSDate timeIntervalSinceReferenceDate]);
Run Code Online (Sandbox Code Playgroud)

编辑:

它似乎是一个NSInteger CAN存储NSTimeInterval,至少在接下来的几十年里.当前日期的timeIntervalSinceReferenceDate大约是519,600,000,或大约2 ^ 28.在32位设备上,NSInteger可以保存从-2 ^ 31到2 ^ 31-1的值.(2 ^ 31是2,147,483,648