【问题标题】:What does it mean to % 2147483647L on epoch time?% 2147483647L 在纪元时间是什么意思?
【发布时间】:2019-02-27 14:48:21
【问题描述】:

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

我正在查看一些通知处理 SDK,他们正在使用此代码生成通知 ID:

private int generateTimestampId() {
    return (int)(new Date().getTime() % 2147483647L);
}

这可能是一个很好的解决方案,但我不明白% 2147483647L 在纪元时间的上下文中代表什么

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

【问题讨论】:

标签: java push-notification unix-timestamp integer-overflow


【解决方案1】:

可以防止当long 缩小为int 时出现负值。考虑以下代码:

long value = 1L + Integer.MAX_VALUE; // anything past max integer
int i1 = (int) value; // -2147483648
int i2 = (int) (value % 2147483647L); // 1

使用% 2147483647L,代码确保该数字始终小于Integer.MAX_VALUE,即2147483647,然后才缩小为int

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

【讨论】:

    猜你喜欢
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2010-09-11
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    相关资源
    最近更新 更多