代码之家  ›  专栏  ›  技术社区  ›  codebot

当前时间毫秒在iOS中返回32位的负值

  •  6
  • codebot  · 技术社区  · 10 年前

    我需要以毫秒为单位从系统中获取当前时间。我正在使用XCode 5.1.1,我尝试了以下方法:,

    long timePassed_ms = ([[NSDate date] timeIntervalSince1970] * 1000);

    这是很好的工作 iPad Retina(64-bit) 模拟器。但当我运行这个时 iPad(32 bit) 模拟器,它返回负值。

    输出

    In 32bit iPad : -2147483648

    In 64bit iPad : 1408416635774(This is the correct time)

    有人能帮忙吗?

    提前感谢!

    2 回复  |  直到 10 年前
        1
  •  4
  •   ppalancica    10 年前

    长类型值的间隔为:

    2147483648至2147483647

    尝试改用long-long,它使用8个字节,间隔为:

    9223372036854775808至9223372036864775807

    如果使用long-long得到错误的结果,请尝试使用double,但请确保正确格式化结果,以防需要将其放置在某个位置。

        2
  •  2
  •   Community Dai    7 年前

    long 仅为 4 32位iPad上的字节数(最大值 2147483647 )所以它溢出了。你应该使用 long long double 相反( 双重的 实际上是什么 timeIntervalSince1970 返回,因此可能是最佳选择):

    double timePassed_ms = ([[NSDate date] timeIntervalSince1970] * 1000);
    

    This answer 列出了可用类型及其大小。