首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >1000 * 60 * 60 * 24 * 30为负数

1000 * 60 * 60 * 24 * 30为负数
EN

Stack Overflow用户
提问于 2013-06-21 02:37:02
回答 4查看 12.6K关注 0票数 7

我试图通过乘以毫秒来计算30天,但是结果仍然是days_30的负数,我不知道为什么。

任何建议都是非常感谢的!

代码片段:

代码语言:javascript
复制
// check to ensure proper time has elapsed
                SharedPreferences pref = getApplicationContext()
                        .getSharedPreferences("DataCountService", 0);
                 long days_30 = 1000 * 60 * 60 * 24 * 30;
                 long oldTime = pref.getLong("smstimestamp", 0);
                long newTime = System.currentTimeMillis();
                 if(newTime - oldTime >= days_30){

days_30值结果为:-1702967296

附注:

代码语言:javascript
复制
 double days_30 = 1000 * 60 * 60 * 24 * 30;
                 double oldTime = pref.getLong("smstimestamp", 0);
                double newTime = System.currentTimeMillis();
                 if(newTime - oldTime >= days_30){

结果会产生一个较小的-但仍然是负数。-1.702967296E9

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-06-21 02:39:18

您正在将ints相乘,并且因为the maximum integer is 2^31 - 1而发生溢出。只有在乘法之后,它才会转换为long。将第一个数字转换为long

代码语言:javascript
复制
long days_30 = (long) 1000 * 60 * 60 * 24 * 30;

或者使用long文本:

代码语言:javascript
复制
long days_30 = 1000L * 60 * 60 * 24 * 30;

这将从一开始就强制执行long数学运算。

票数 26
EN

Stack Overflow用户

发布于 2013-06-21 02:39:09

代码语言:javascript
复制
   long days_30 = 1L * 1000 * 60 * 60 * 24 * 30;
票数 2
EN

Stack Overflow用户

发布于 2013-06-21 02:40:58

只需将乘法更改为long days_30 = 1000L * 60 * 60 * 24 * 30;即可

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17221254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档