のえら

技術備忘とかメモとか.間違いはつっこんでいただきたい所存.

1ヶ月をミリ秒に換算して使いたい(Java編)

*最大31日としたいので日数は31日固定

1日 = 24時間
1時間 = 60分
1分 = 60秒
1秒 = 1000ミリ秒

31 * 24 * 60 * 60 * 1000

期待している結果は 2678400000 だったがユニットテストを実行してみると -1616567296 になっていた。

よくみると IntelliJ で警告が表示されていることに気がつく。

Numeric overflow expression This inspection checks for expressions which overflow during computation, i.e.: a = 1.0/0.0;

Integer は 2147483647 が最大値なので、オーバーフローを起こしていた。

最大値が収まる Long 型にするため、乗算する際にミリ秒を L で Long 型にして、計算結果を暗黙的にキャストする。

31 * 24 * 60 * 60 * 1000L