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

Posted

技术标签:

【中文标题】当前时间毫秒返回 iOS 中 32 位的负值【英文标题】:Current time milliseconds returns minus value for 32 bit in iOS 【发布时间】:2014-08-19 02:52:17 【问题描述】:

我需要以毫秒为单位从系统获取当前时间。我正在使用 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)

有人可以帮忙吗?

提前致谢!

【问题讨论】:

【参考方案1】:

long 类型值的区间为:

–2,147,483,648 到 2,147,483,647

尝试使用 long long 代替,它使用 8 个字节,并且有间隔:

–9,223,372,036,854,775,808 至 9,223,372,036,854,775,807

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

【讨论】:

不客气,请投票和/或接受我的回答。谢谢!【参考方案2】:

long 在 32 位 iPad 上仅是 4 字节(最大值 2147483647),所以它会溢出。您应该改用long longdoubledouble 实际上是timeIntervalSince1970 返回的,所以它可能是最好的选择):

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

This answer 有一个很好的可用类型及其大小的列表。

【讨论】:

以上是关于当前时间毫秒返回 iOS 中 32 位的负值的主要内容,如果未能解决你的问题,请参考以下文章

postman请求参数如何获取到当前时间

如何在ssis包中捕获包的启动时间,以毫秒为单位

java中想获取前一天的开始和结束的两个毫秒数,请问分别怎样获取???????

如何计算两个日期之间的月数和天数,而不在 SQL Server 中返回负值

当 Scikit 线性模型返回负值时?

Mysql常用函数总结