当前时间毫秒返回 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 long
或double
(double
实际上是timeIntervalSince1970
返回的,所以它可能是最好的选择):
double timePassed_ms = ([[NSDate date] timeIntervalSince1970] * 1000);
This answer 有一个很好的可用类型及其大小的列表。
【讨论】:
以上是关于当前时间毫秒返回 iOS 中 32 位的负值的主要内容,如果未能解决你的问题,请参考以下文章
java中想获取前一天的开始和结束的两个毫秒数,请问分别怎样获取???????