Unix の時刻には「うるう秒」が含まれていないと聞きました。また、Java Calendar API にはうるう秒が含まれていないと聞きました。
1972年からうるう秒として27秒が追加されました。また、Unix 時間は 1970-01-01 00:00:00 (UTC) から始まりました。
したがって、現在の UTC 時間と Unix 時間には 27 秒の差があると思いました。
私の考えを明確にするために、以下のような実験を行いました。1614766198 は、2021 年 3 月 3 日 10:10:00 (UTC+0) の Unix 時間です。
import java.util.Calendar;
import java.util.TimeZone;
public class CanendarTest {
public static void main(String[] args) throws InterruptedException {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.setTimeInMillis(1614766198L * 1000);
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
System.out.println(cal.get(Calendar.MINUTE));
System.out.println(cal.get(Calendar.SECOND));
}
}
上記のコードの結果は
output
2021
2
3
10
9
58
出力は「2021-03-03 10:09:58」のようです。
ですから、私の質問は、Java Calendar API が 1970-01-01 00:00:00 (UTC) から 27 秒の差ではなく 2 秒の差を返すのはなぜですか?