我正在开发一个支持 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;
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |