随便写了一个 public static void main(String[] args) { String time = "2007/10"; String[] times = time.split("/"); Calendar cal = new GregorianCalendar(); cal.setLenient(false); cal.set(Calendar.YEAR, Integer.parseInt(times[0])); cal.set(Calendar.MONTH, Integer.parseInt(times[1]) - 1); cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); int result = cal.get(Calendar.DAY_OF_YEAR); System.out.println(result); }
速度最快还是查表 除了2月份,其他月份日期都是固定的 查表得到每个月月底与年初的日期差,如果日期为2月或2月以后,再考虑是否为闰年,如果为闰年,日期差+1附代码:private static final int[] offdays=//不考虑闰年情况下每月月底距年初的天数 { 31, 31+28, 31+28+31, 31+28+31+30, 31+28+31+30+31, 31+28+31+30+31+30, 31+28+31+30+31+30+31, 31+28+31+30+31+30+31+31, 31+28+31+30+31+30+31+31+30, 31+28+31+30+31+30+31+31+30+31, 31+28+31+30+31+30+31+31+30+31+30, 31+28+31+30+31+30+31+31+30+31+30+31 }; public static final int getOffDays(int year,int month) { int off=offdays[month];//查表计算日起差 //如果是2月或2月后,并且是闰年的话,日期差+1 if(month>=java.util.Calendar.FEBRUARY && new java.util.GregorianCalendar().isLeapYear(year)) off++; return off; }
String time = "2007/10";
String[] times = time.split("/");
Calendar cal = new GregorianCalendar();
cal.setLenient(false);
cal.set(Calendar.YEAR, Integer.parseInt(times[0]));
cal.set(Calendar.MONTH, Integer.parseInt(times[1]) - 1);
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
int result = cal.get(Calendar.DAY_OF_YEAR);
System.out.println(result); }
除了2月份,其他月份日期都是固定的
查表得到每个月月底与年初的日期差,如果日期为2月或2月以后,再考虑是否为闰年,如果为闰年,日期差+1附代码:private static final int[] offdays=//不考虑闰年情况下每月月底距年初的天数
{
31,
31+28,
31+28+31,
31+28+31+30,
31+28+31+30+31,
31+28+31+30+31+30,
31+28+31+30+31+30+31,
31+28+31+30+31+30+31+31,
31+28+31+30+31+30+31+31+30,
31+28+31+30+31+30+31+31+30+31,
31+28+31+30+31+30+31+31+30+31+30,
31+28+31+30+31+30+31+31+30+31+30+31
};
public static final int getOffDays(int year,int month)
{
int off=offdays[month];//查表计算日起差
//如果是2月或2月后,并且是闰年的话,日期差+1
if(month>=java.util.Calendar.FEBRUARY && new java.util.GregorianCalendar().isLeapYear(year))
off++;
return off;
}