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);