Javaの日時管理は、1970年1月1日00:00:00を基準(これをThe Epochという)とし、その時間からの経過ミリ秒で扱っている。なお、この経過秒数には、一般的には閏秒は含めていない。 この経過ミリ秒数は64ビットで表現されるが、符号を考慮すると有効桁は63ビットしかない。そのため「1970年1月1日 00:00:00 + 0x7fffffffffffffffミリ秒より後が表現できない」という問題を抱える事となった。 即ち、292278994(令和292276976)年8月17日にカウンターはオーバーフローし、時刻は予期せぬ値を指すものと考えられる。これが2億9千万年問題である。 実際にどうなるのか、Linux上のJava環境で動作を確認してみた。 import java.util.*; public class test { public static void main(St