【问题标题】:How to convert NSTimeInterval to int?如何将 NSTimeInterval 转换为 int?
【发布时间】:2012-06-20 14:09:00
【问题描述】:

如何将 NSTimeInterval 转换为整数值?

我的 TimeInterval 保存值 83.01837。我需要将其转换为83。我用谷歌搜索过,但找不到任何帮助。

【问题讨论】:

标签: iphone ios integer nstimeinterval


【解决方案1】:

直接赋值:

NSTimeInterval interval = 1002343.5432542;
NSInteger time = interval;
//time is now equal to 1002343

NSTimeInterval 是一个双精度值,所以如果你直接将它分配给一个 NSInteger(或 int,如果你愿意的话)它会起作用。这会将时间截断到最接近的秒数。

如果您希望四舍五入到最接近的秒数(而不是将其截断),您可以在分配之前使用 round:

NSTimeInterval interval = 1002343.5432542;
NSInteger time = round(interval);
//time is now equal to 1002344

【讨论】:

  • 可能需要round() 来电。
  • hmmm...将 0.5 添加到间隔不是更好吗?我知道我真的在这里争吵,但是如果不使用函数调用,效果会一样。
  • 实际上,round 更好,因为它可以按预期正常处理负数,而将 0.5 或添加到数字不会...
  • 啊,真是够了……讨厌的底片。 :)
【解决方案2】:

根据the documentationNSTimeInterval 只是一个double

typedef double NSTimeInterval;

您可以将其转换为int

seconds = (int) myTimeInterval;

但请注意溢出!

【讨论】:

    【解决方案3】:

    在 Swift 3.0 中

    let timestamp = round(NSDate().timeIntervalSince1970)
    

    【讨论】:

    • 这将为您提供小数点后跟 0. (83.01837--> 83.0)
    • 请检查所附截图@prakash
    【解决方案4】:

    我怀疑来自 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

    【讨论】:

      【解决方案5】:

      斯威夫特 4、斯威夫特 5

      我只是投给Int64:

      Int64(Date().timeIntervalSince1970)
      

      【讨论】:

        【解决方案6】:

        我需要将 NSDate 存储在 Swift Number 中。我使用了以下效果很好的演员表。

        Double(startDateTime.timeIntervalSince1970)
        

        【讨论】:

        • Double() 不会创建整数值
        猜你喜欢
        • 2014-10-27
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 2012-02-29
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多