每天都是24小时,是大家公认的一个事实。可以在Java中也是这样吗?
标题说看看java.util.Calendar,那就看看这个类里一天是不是24小时。
先看看下面这段代码。
创建了两个Calendar对象,start是“2020-01-01 00:00:00”,而end是“2020-01-02 00:00:00”。这里有个比较特殊的地方是,月是从0开始的,也就是0表示1月。
最后通过计算获取这两个时间点之间的小时数,并输出。看上面图中,最后输出的是24。
这不也是24小时吗。也没有什么特殊啊。
别急,继续往下看,看看下面的代码。
这次是计算的“1990-04-15 00:00:00”到“1990-04-16 00:00:00”之间的小时数,竟然是23,真的不是每天的有24小时。可是这是为什么呢?
不要着急,还没有完呢。
再看下面这段代码。
一天不止可能比24小时少,还可能会多,像上面这段代码,计算的是“1990-09-15 00:00:00”到“1990-09-16 00:00:00”之间的小时数,结果是25小时。
怎么会有这样的结果呢,会有的一天是23小时,有的一天是25小时呢?
是这个Calendar类有bug?
当然不是了,其实这是有一个历史原因在里面的。
是“夏令时”,可能有的年龄小一点的朋友没有听过。可以到百度百科去看一看就能明白个大概了。
因为夏天的时候,日照时间变长,天亮得早。“夏令时”就是在这个时候,把时间往前拨一小时。目的是让人们早睡早起,节约照明用电。
往前拨一小时的这天就会少一小时,变成23小时,就像上面示例代码中的“1990-04-15”。
而到了后面日照时间变短的时候,就再往回拨一小时,往回拨的这天就会多一小时,就像上面示例代码中的“1990-09-15”。
今天这个关于一天是不是24小时的神奇问题就聊到这里了。