“表达式中的数字溢出”操纵时间戳

wil*_*kas 0 android exception numeric

我尝试通过将每次迭代的时间戳设置为 X 天前来迭代 SQL 查询。我注意到,一旦搜索 25 天前的日期,我的日期就开始返回无意义的内容。我发现 Android Studio 在此代码示例中的第二行显示“表达式中的数字溢出”警告:

int daysBack = 25;
long dayBeginningMilis = getTodaysBeginningMilis() - 86400000 * daysBack;
Run Code Online (Sandbox Code Playgroud)

getTodaysBeginningMilis是我的不言自明的方法。为什么会显示这个警告?86400000是24小时内的英里数。

wil*_*kas 5

看来这部分“86400000 * daysBack”会导致数字溢出,因为两个数字都是整数,而乘法会导致整数越界。为了解决这个问题,我将所有数字都设置为长类型:

long daysBack = 25L;
long dayBeginningMilis = getTodaysBeginningMilis() - 86400000L * daysBack;
Run Code Online (Sandbox Code Playgroud)