首页 > 解决方案 > 设置 calendar.day_of_month 就是设置 calendar.year

问题描述

我有一个最初设置为 2019-11-01 的日历,我想使用以下方法设置为每月的第一个日期和最后一个日期:

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

标签: javaspringdatecalendarsimpledateformat

解决方案


您可以使用 java-8 现代日期时间 API LocalDate,停止使用旧版Calendarutil.Date

LocalDate date = LocalDate.parse("2019-11-01");

System.out.println(date.with(TemporalAdjusters.firstDayOfMonth()));  //2019-11-01
System.out.println(date.with(TemporalAdjusters.lastDayOfMonth()));   //2019-11-30

推荐阅读