UNIX時間(秒)からDate型オブジェクトを作成する場合の注意

UNIX時間(秒)からDate型オブジェクトを作成する場合に、計算に気をつけないと正しい時刻とならない場合があるため注意。
具体的には、UNIX時間(秒)がint型変数になっている場合、ミリ秒換算するために1000を掛けるとオーバーフローしてしまう。

// オーバーフローした値が使用されてしまい正しい時刻とならない
int time = 1704038400;
Date date = new Date(time * 1000);

正しい時刻を作成するためには、ミリ秒換算した値がlong型になるようにする必要がある。

// 正しい時刻となる
long time = 1704038400;
Date date = new Date(time * 1000);

計算前にlong型にキャストしても良い。

// 正しい時刻となる
int time = 1704038400;
Date date = new Date((long) time * 1000);