Calendar.MINUTE获取的分钟值与Date解析结果不符,求原因
问题原因解析:Calendar.MINUTE与Date分钟值的差异
嗨,你这里踩了一个Java日期类的常见新手坑——Calendar.MINUTE根本不是用来直接获取当前分钟数值的!
咱们把问题拆解开看:
- 你用
SimpleDateFormat格式化new Date()得到的是当前系统时间的真实分钟,这部分逻辑是完全正确的。 - 但直接打印
Calendar.MINUTE,输出的其实是一个静态常量的固定值(通常是12),它的作用是作为「字段索引标记」——用来告诉Calendar类:“我要操作的是分钟这个字段”,而不是直接返回当前时间的分钟数。
文档里提到的“返回当前分钟的整数值”,指的是调用Calendar.get(Calendar.MINUTE)方法时的返回结果,而不是Calendar.MINUTE这个常量本身。你得先获取当前时间的Calendar实例,再用get()方法传入这个常量,才能拿到真实的当前分钟。
给你修正后的代码,跑起来结果就一致了:
public class Testerson { public void print() { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm"); System.out.println("Date time = " + sdf.format(new Date())); // 正确获取当前分钟的姿势:先拿Calendar实例,再用get方法指定字段 Calendar calendar = Calendar.getInstance(); System.out.println("Calendar Minute = " + calendar.get(Calendar.MINUTE)); } public static void main(String[] args) { new Testerson().print(); } }
简单类比一下:Calendar.MINUTE是打开Calendar中“分钟抽屉”的钥匙,你直接把钥匙当成抽屉里的分钟数值用,当然和真实时间的分钟对不上啦😉
内容的提问来源于stack exchange,提问作者juju
相关产品推荐
相关产品推荐

