問題
兩種計算時間戳的結果不一樣。
int days = 30; Instant now = Instant.now(); long timestamp_cur = now.toEpochMilli(); long nowPre = timestamp_cur - 1000 * 60 * 60 * 24 * days; Instant threeDaysAgo = now.minus(days, ChronoUnit.DAYS); long nowPre2 = threeDaysAgo.toEpochMilli(); System.out.println(String.format("nowPre: %d, nowPre2: %d, minus:%s", nowPre, nowPre2, nowPre-nowPre2));
當days=10,20時是一致的, 但當days=30時有差異。
原因
int 最大值:2147483647 (231-1), 當days=30時結果時2592000000, 超過int最大值,導致越界。
改正
顯性指定大數的型別
long nowPre = timestamp_cur - 1000L * 60 * 60 * 24 * days;