1000*60*60*24*30结果为负数

Noo*_*954 5 java math android negative-number long-integer

我试图通过乘以毫秒来计算30天,但结果不断变为days_30值的负数,我不知道为什么.

任何建议都非常感谢!

代码链:

// 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){
Run Code Online (Sandbox Code Playgroud)

days_30值的结果为:-1702967296

PS

 double days_30 = 1000 * 60 * 60 * 24 * 30;
                 double oldTime = pref.getLong("smstimestamp", 0);
                double newTime = System.currentTimeMillis();
                 if(newTime - oldTime >= days_30){
Run Code Online (Sandbox Code Playgroud)

结果较小 - 但仍为负数.-1.702967296E9

rge*_*man 21

您正在相乘ints,并且因为最大整数是2^31 - 1溢出而发生溢出.只有在乘法之后它才会转换为a long.将第一个数字转换为long.

long days_30 = (long) 1000 * 60 * 60 * 24 * 30;
Run Code Online (Sandbox Code Playgroud)

或使用long文字:

long days_30 = 1000L * 60 * 60 * 24 * 30;
Run Code Online (Sandbox Code Playgroud)

long将从一开始就强制数学运算.