记录一个java中Calendar.HOUR和Calendar.HOUR_OF_DAY的差异

292 阅读1分钟

java中的Calendar是一个很好用的时间对象,可以方便的获取、设置时间。但是在使用过程中会有一些细微的差异,也可以被称之为“坑”。

Calendar对于小时有两个常量定义对象,一个是Calendar.HOUR,另一个就是Calendar.HOUR_OF_DAY。从字面意思可以简单看出一个是12小时制(即:Calendar.HOUR),一个是24小时制(即:Calendar.HOUR_OF_DAY)。但是在使用时,Calendar.HOUR有可能会得到意想不到的结果。

问题

Calendar now = Calendar.getInstance();
now.set(Calendar.HOUR, 0);
now.set(Calendar.MINUTE, 0);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);

以上代码在每天的中午12点之前表现为 00:00:00.000。
但是在12点之后就表现为 12:00:00.000。

正确使用

Calendar now = Calendar.getInstance();
now.set(Calendar.HOUR_OF_DAY, 0);
now.set(Calendar.MINUTE, 0);
now.set(Calendar.SECOND, 0);
now.set(Calendar.MILLISECOND, 0);

以上代码在任何时刻均表现一致,为:12:00:00.000。