我们使用以下代码段来获取所提供的月份和年份的天数。对于02和2011,它返回天数为31(事实并非如此)。对于02和2016,它返回天数为29。
任何线索。
package Processes.BSAInvoiceInquiry.ExternalCall.PaymentStatusInquiry;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class PaymentStatusInquiryJavaCode {
protected int year = 0;
protected int month = 0;
protected int days = 0;
public void invoke() throws Exception {
PaymentStatusInquiryJavaCode a = new PaymentStatusInquiryJavaCode();
System.out.println("Year " + year);
System.out.println("Month " + month);
Calendar calObj = new GregorianCalendar();
calObj.set(Calendar.YEAR, year);
calObj.set(Calendar.MONTH, month - 1);
System.out.println("Month " + Calendar.MONTH);
int numDays = calObj.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("No of the days in the month is " + numDays);
days = numDays;
}
}
答案 0 :(得分:3)
这只是Calendar
的另一个意外行为,请参阅this,您可以在创建后clear
修复它:
Calendar calendar = new GregorianCalendar();
calendar.clear();
calendar.set(Calendar.YEAR, 2011);
calendar.set(Calendar.MONTH, 1);
System.out.println(calendar.getActualMaximum(calendar.DAY_OF_MONTH)); //28
应避免使用过时的Calendar
。在java8中,这可以通过以下方式完成:
YearMonth yearMonth = YearMonth.of(2011, 2);
int lengthOfMonth = yearMonth.lengthOfMonth();
System.out.println(lengthOfMonth); //28
答案 1 :(得分:2)
要完成user6690200 answer,它将在2016年返回29,因为它是今天的第29届,2016年是闰年,并且在2月29日。 2011年不是闰年所以它实际上返回了下个月的数字(3月有31天)。
答案 2 :(得分:0)
试
// month 1 based
new Calendar.Builder().setDate(year, month-1, 1).build().getActualMaximum(DAY_OF_MONTH)
问题是没有
calObj.set(DAY_OF_MONTH, 1);