公历问题
Issue with Gregorian Calendar
我们使用下面的代码片段来获取所提供月份和年份的天数。对于 02 和 2011,它 returns 天数为 31(事实并非如此)。对于 02 和 2016,returns 天数为 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;
}
}
完成 user6690200's 2016 年 returns 29 因为今天是 29 号,而 2016 年是闰年,是 2 月 29 日。 2011 年不是闰年,所以它实际上 returns 下个月(3 月有 31 天)的数字。
这只是 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
尝试
// month 1 based
new Calendar.Builder().setDate(year, month-1, 1).build().getActualMaximum(DAY_OF_MONTH)
问题是none
calObj.set(DAY_OF_MONTH, 1);
我们使用下面的代码片段来获取所提供月份和年份的天数。对于 02 和 2011,它 returns 天数为 31(事实并非如此)。对于 02 和 2016,returns 天数为 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;
}
}
完成 user6690200's
这只是 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
尝试
// month 1 based
new Calendar.Builder().setDate(year, month-1, 1).build().getActualMaximum(DAY_OF_MONTH)
问题是none
calObj.set(DAY_OF_MONTH, 1);