【发布时间】:2020-06-18 15:20:38
【问题描述】:
我遇到了一个我真的不明白的问题。我正在尝试在日历上使用 set 方法,但只有在我打印它时它才会修改值,这里是代码:
Calendar cal = Calendar.getInstance();
cal.set(2020,2,31);
// System.out.println("Necessary print: " + cal.getTime());
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
// reset time
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
System.out.println("Date set: " + cal.getTime());
System.out.println("Day of month: " + cal.get(Calendar.DAY_OF_MONTH));
前面的代码给了我输出:
Date set: Mon Mar 02 00:00:00 CET 2020 Day of month: 2
如果我取消注释“必要的打印”,那么我会得到:
Necessary print: Tue Mar 31 23:07:17 CEST 2020 Date set: Mon Mar 30 00:00:00 CEST 2020 Day of month: 30
我真的很想知道为什么打印会影响此方法,在此先感谢您的帮助! ????
【问题讨论】:
-
请参阅docs.oracle.com/javase/7/docs/api/java/util/Calendar.html 中的 字段操作 部分:“虽然日历字段 f 会立即更改,但在下一次调用 get() 之前不会重新计算日历的时间值(以毫秒为单位) 、getTime()、getTimeInMillis()、add() 或 roll()。”还有一个例子可能会有所帮助。
-
我建议你不要使用
Calendar。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的类。
标签: java methods printing calendar java.util.calendar