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。