设置calendar.day_of_month是设置calendar.year

问题描述 投票:0回答:2

我有一个最初设置为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()));

Sysout:

2019-11-01

0001-11-01

0030-11-01

java spring date calendar simpledateformat
2个回答
1
投票

您可以使用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

0
投票

您应该使用

Calendar.DAY_OF_MONTH

NOT

cal.get(Calendar.DAY_OF_MONTH)

因为Calendar类具有静态字段来表示每个字段的ID,例如DAY_OF_MONTH = 5并且当您使用cal.set(cal.get(Calendar.DAY_OF_MONTH),1)时,您告诉日历获取等于= 1的DAY_OF_MONTH日历值(您说cal值= 2-19-11-01 ),而1是Year,因此您将Year设置为1而不是day

使用方式如下:cal.set(Calendar.DAY_OF_MONTH,1);

© www.soinside.com 2019 - 2024. All rights reserved.