如题 在java设置指定日期 可以使用Calendar这个类来实现如下:
Calendar calendar = Calendar.getInstance(); calendar.set(2019, 11, 31); Date strDate = calendar.getTime();
这个strDate却是12月
翻查源码得知

英文不好的我大致也能看的懂 月份是从0开始 即0代表1月
然后我们在来看看SimpleDateFormat这个日期转换:
DateFormat formatUpperCase = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("yyyy-MM-dd: " + formatUpperCase.format(strDate));
formatUpperCase = new SimpleDateFormat("YYYY-MM-dd");
System.out.println("YYYY-MM-dd: " + formatUpperCase.format(strDate));
打印结果:
yyyy-MM-dd: 2019-12-31
YYYY-MM-dd: 2020-12-31
由此可见YYYY和yyyy在转换日期的时是有区别的 不妨查看一下源码即可知道:

y代表year 而Y 代表的确实week year 两者是有却别的
个人理解是:一周开始于周日 截止于周六 而week year 表示这一周所在的年份
所以在使用SimpleDateFormat做日期格式转换的时候YYYY 慎用 尽量使用yyyy
本文探讨了在Java中使用Calendar设置指定日期时出现的月份错误,原因是月份从0开始。同时,通过示例展示了SimpleDateFormat的yyyy和YYYY在转换日期时的不同,其中YYYY表示week year,可能导致意想不到的结果。建议在格式化日期时谨慎使用YYYY,通常应首选yyyy。
1592

被折叠的 条评论
为什么被折叠?



