Java和Unix的“ epoch”(自1970年1月1日00:00:00 UTC以来的秒数)都完全忽略了leap秒。他们俩都假设每天(以UTC为单位)精确地是86400秒。验证的简单代码块:
Calendar c = Calendar.getInstance();
c.setTimeZone(TimeZone.getTimeZone("UTC"));
c.set(2014, 0, 1, 0, 0, 0);
c.set(Calendar.MILLISECOND, 0);
System.out.println(c.getTimeInMillis());
您将看到从1970年1月1日到2014年1月1日的秒数是86400的精确倍数(实际上是44年 365.25天/年 86400秒/天);不应这样,因为在此间隔中引入了25个leap秒。
如果需要考虑leap秒,则需要找到一个可以做到这一点的库,或者自己调整一下。