Java 这对大纪元时间上的%2147483647L意味着什么?

Java 这对大纪元时间上的%2147483647L意味着什么?,java,push-notification,unix-timestamp,integer-overflow,Java,Push Notification,Unix Timestamp,Integer Overflow,我刚刚遇到了在Android中生成通知id的问题 我正在浏览一些通知处理sdk,他们使用以下代码生成通知id: private int generateTimestampId() { return (int)(new Date().getTime() % 2147483647L); } 这可能是一个很好的解决方案,但我不明白%2147483647L在大纪元的上下文中代表什么 (请注意:new Date().getTime()返回自1970年1月1日00:00:00 GMT以来的毫秒数)

我刚刚遇到了在Android中生成通知id的问题

我正在浏览一些通知处理sdk,他们使用以下代码生成通知id:

private int generateTimestampId() {
    return (int)(new Date().getTime() % 2147483647L);
}
这可能是一个很好的解决方案,但我不明白
%2147483647L
在大纪元的上下文中代表什么


(请注意:
new Date().getTime()
返回自1970年1月1日00:00:00 GMT以来的毫秒数)

long
缩小到
int
时,可以防止出现负值。考虑下面的代码:

long value = 1L + Integer.MAX_VALUE; // anything past max integer
int i1 = (int) value; // -2147483648
int i2 = (int) (value % 2147483647L); // 1
使用
%2147483647L
时,代码确保在将数值缩小到
int
之前,该数值始终小于
整数。MAX_值
,即2147483647


在生成ID的上下文中,这或多或少是有意义的,我们很少在这个用例中使用负数。

FYI,
2147483647L
=,32位有符号整数的限制。啊,谢谢@BasilBourque,所以这只是为了限制epoch(一般来说,它不适合int;“整数溢出”)想知道这里的
Date
是哪一类?您调用的
getNow
方法不是类。此代码:
(int)((new Date().getTime())%2\u 147\u 483\u 647L)
返回时
171515712
(171515712)。