在Java中为当前时间添加一个大时间戳

1 java timestamp

我正在开发一个支持 Google 两步验证的应用程序。此应用程序还支持“信任此设备 30 天”的功能。

我使用数据库来保存所有这些信息,例如 IP 地址和过期时间。现在,当我填写时间戳System.currentTimeMillis() + 30 * 24 * 60 * 60 * 1000以在当前时间上添加 30 天时,它会在数据库中插入一个早于当前时间的时间戳。

例如:当前时间 = 1483223733000 (2016-31-12 11:36 PM UTC+1)。现在,当我添加 30 天(即2592000000毫秒)时,得到的日期类似于1481520984841 (2016-12-12 6:36 AM UTC+1)不是提前 30 天,而是向后大约 19 天。

小智 5

这个问题与 32 位整数溢出有关。由于整数的最大值为2147483647,因此 30 天(以毫秒为单位)对于整数来说太大,并且会产生类似的整数-1702967296(大约为 -19 天(以毫秒为单位)。)

为了解决这个问题,我使用 along代替int. 所以现在我这样做: System.currentTimeMillis() + 30L * 24 * 60 * 60 * 1000;