【发布时间】:2019-11-17 23:24:18
【问题描述】:
我的日历最初设置为 2019 年 11 月 1 日,我想使用以下方法将其设置为月份的第一个日期和最后一个日期:
cal.set(int field,int value)
对于我使用的字段:
Calendar.DATE or Calendar.DAY_OF_MONTH
但是 sysout 上的系统显示它正在设置 Calendar.YEAR
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
cal.set(cal.get(Calendar.DAY_OF_MONTH),1);
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
cal.set(cal.get(Calendar.DAY_OF_MONTH),cal.getActualMaximum(Calendar.DAY_OF_MONTH));
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
系统输出:
2019-11-01
0001-11-01
0030-11-01
【问题讨论】:
-
Java 8 及其 java.time API 于 2014 年 3 月问世。我们是 2019 年 11 月,5 年多之后。停止使用旧的、过时的、笨重的 Calendar 和 Date 类。使用 java.time API。
-
cal.set(Calendar.DAY_OF_MONTH, 1);和cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));- 不要打电话给cal.set(cal.get(Calendar.DAY_OF_MONTH)- 这是不正确的。 -
是的,
Calendar类有一个令人困惑的接口。难怪人们会犯这样的错误。不幸的是,你远不是第一个,也不是最后一个。好的解决方案(它非常好)是停止使用Calendar类并改用java.time, the modern Java date and time API,。 -
谢谢大家,我将退出这个日历课程
标签: java spring date calendar simpledateformat