Java中Calendar.getActualMinimum(HOUR)返回12而非0的问题咨询
问题解答:Calendar.HOUR的最小值为何是12而非0?
哦,这个坑我之前踩过!你遇到的问题核心在于Calendar.HOUR这个字段的定义——它是12小时制的时间字段,对应的取值范围是1-12(分别代表上午/下午的12点到11点),所以getActualMinimum(Calendar.HOUR)返回12完全是符合API设计的。
为什么会这样?
Java的Calendar类里,时间字段分为两种:
Calendar.HOUR:12小时制,用于区分上午(AM)和下午(PM),最小值是12(对应午夜或正午的12点),最大值是11。Calendar.HOUR_OF_DAY:24小时制,取值范围是0-23,最小值是0(对应当天的午夜0点),这才是我们通常用来设置“当天起始时间”的字段。
解决方案
如果你想把时间设置为当天的午夜0点,替换成Calendar.HOUR_OF_DAY就可以解决问题:
// 方式一:通过getActualMinimum获取最小值 calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMinimum(Calendar.HOUR_OF_DAY)); // 方式二:直接写0(因为HOUR_OF_DAY的最小值固定为0) calendar.set(Calendar.HOUR_OF_DAY, 0);
如果你的场景确实需要处理12小时制的时间,那12就是正确的最小值,但大多数情况下,设置当天起始时间用24小时制的HOUR_OF_DAY才是符合预期的选择。
内容的提问来源于stack exchange,提问作者Elias Dolinsek
相关产品推荐
相关产品推荐

