Я пытаюсь вычислить 30 дней, умножая миллисекунды, однако результат постоянно оказывается отрицательным числом для значения days_30, и я не знаю почему.

Любые предложения очень ценятся!

ФРАГМЕНТ КОДА:

// check to ensure appropriate time has actually elapsed SharedPreferences pref = getApplicationContext() .getSharedPreferences(\"DataCountService\", 0); long days_30 = 1000 * 60 * 60 * 24 * 30; long oldTime = pref.getLong(\"smstimestamp\", 0); lengthy newTime = System.currentTimeMillis(); if(newTime - oldTime >= days_30){значение days_30 приводит к: -1702967296

P.S.

You are watching: 1000*60*60*24

dual days_30 = 1000 * 60 * 60 * 24 * 30; double oldTime = pref.getLong(\"smstimestamp\", 0); twin newTime = System.currentTimeMillis(); if(newTime - oldTime >= days_30){В результате получается меньшее, но все же отрицательное число. -1.702967296E9

javaandroidmathlong-integernegative-number
Поделиться ИсточникNoobDev954 20 июня 2013 в 18:37

4 ответа


24

Вы умножаете ints вместе, и переполнение происходит, потому что максимальное целое число равно 2^31 - 1 . Только после умножения он преобразуется в lengthy . Приведите первое число как lengthy .

long days_30 = (long) 1000 * 60 * 60 * 24 * 30;или используйте литерал lengthy :

long days_30 = 1000L * 60 * 60 * 24 * 30;Это заставит lengthy математических операций с самого начала.


Поделитьсяrgettman
20 июня 2013 в 18:39
2

long days_30 = 1L * 1000 * 60 * 60 * 24 * 30;
ПоделитьсяZhongYu
20 июня 2013 в 18:39
1
Просто измените свое умножение на lengthy days_30 = 1000L * 60 * 60 * 24 * 30;


ПоделитьсяGuillaume Darmont
20 июня 2013 в 18:40
0

Java имеет ограничения, когда дело доходит до примитивных типов данных. Если ваш длинный или двойной слишком велики, то он переполнится в отрицательное число. Попробуйте использовать класс BigInteger для хранения больших чисел.

Проверьте это:

Как Java обрабатывает целочисленные переполнения и переполнения и как бы вы это проверили?


ПоделитьсяBut I'm no A Wrapper Class
20 июня 2013 в 18:42
Похожие вопросы:
Какое время соответствует : time()-24*60*60 ? (PHP)

Какое время соответствует time()-24*60*60 7 дней? это правда?

почему это 24 * 60 * 60 * 1000 * 1000 делится на 24 * 60 * 60 * 1000 не равно 1000 в Java?

почему это 24 * 60 * 60 * 1000 * 1000 делится на 24 * 60 * 60 * 1000 не равно 1000 в Java?

Что такое \"int ns = 1;Why (i >= 60 * 60 * 1000 / 1 * 1000)\" истина?

Во-первых, определение двух постоянных выражений без скобок - это моя ошибка: #define BIG_INTERVAL 60 * 60 * 1000 #define SMALL_INTERVAL 1 * 1000 int ns = 1; if (i >= BIG_INTERVAL / SMALL_INTERVAL...

почему стек javascriptgetTime() + 24*60*60*1000 get после 27 октября 2013 года?почему долго COOKIE_TIMEOUT = 1000 * 60 * 60 * 24 * 30 возврат отрицательный?

last long COOKIE_TIMEOUT = 1000 * 60 * 60 * 24 * 30; Выход: -1702967296 Кто-то сказал мне поставить l после 1000 & это работает last long COOKIE_TIMEOUT = 1000L * 60 * 60 * 24 * 30; Выход:...

в чем смысл использования \"days*24*60*60*1000\" в файле cookie?

В чем смысл использования work * 24 * 60 * 60 * 1000 в печенье? Я видел это довольно часто и ничего не понимал Мне нужно создать функцию, которая считывает файл cookie и помещает его значение в...

Разделить количество в упаковке 60

Мне нужна формула, которая разделила бы число на 60. Допустим, если число в 120 (А1), то ответ должен быть be 60(В1) и 60(С1). Если число равно 150 (A1),то ответ должен быть be 60(B1), 60(C1) и...

новая дата(new Date().getTime()-25 * 24 * 60 * 60 * 1000) получил неожиданное свиданиеКак получить разницу между двумя датами в днях, часах (24), минутах( 60), секундах (60) в android

Как получить разницу между двумя датами в днях, часах (24), минутах (60), секундах(60). и Я уже прошел через это Android разница между двумя датами Как мне получить разницу между двумя датами в...

See more: Snowflake Head Band : Clothing, Shoes & Jewelry, Snowflake Headband : Clothing, Shoes & Jewelry

Вызов API каждые 60*1000 миллисекунд

Я работаю над кодом, где мне нужно вызывать некоторые api за каждые 60*1000 миллисекунд как на переднем плане, так и на заднем плане независимо от activity/fragment. Я пробовал использовать...