获取指定日期所在年份的天数

  之前去面试,有道面试题没能做出来。仅因为不知道闰年的计算方法而没能做出来,很不甘心。

public class MyDate {

        // @Author: he_yi
	public static int getDate(String fullDate){
	        //通过“-”把日期分割成年、月、日并存到int类型数组中
		String []s = fullDate.split("-");
		int date [] = new int[3];
		
		for(int i=0;i<3;i++){
			date[i] = Integer.parseInt(s[i]);
		}
		
		//判断是不是2月,如果不是2月不用考虑平、闰年问题
		if(date[1] <2){
			return getMoonDate(date[1]) +date[2];
		}else{
			if(judgeLeapYear(date[0])){
			        //如果是闰年,天数+1
				return getMoonDate(date[1])+1 +date[2];
			}else{
				return getMoonDate(date[1]) +date[2];
			}
			
		}
		
	}

	 /**
	  * 判断是否为闰年
	  * */
	private static boolean judgeLeapYear(int m){
		//闰年判断方法:
		//  1.年份能被400整除就是闰年
		//  2.年份不能被400整除,但是能被4整除但不能被100整除
		if(m % 4 == 0 && m %100 != 0 || m%400 ==0){
			return true;
		}else{
			return false;
		}
		
	}
	

	/**
	 *  先不考虑闰年问题,因为闰年与平年唯一区别在于闰年2月多1天
		通过switch/case语句列出所有对应月份的天数
		从12月到1月的顺序,不加break语句
		直接从指定月份-1月开始到1月的天数相加求平年指定月份前所有月份的天数
	 * */
	private static int getMoonDate(int m){
		int tmp = 0;
		
		switch(m-1){
		case 12:
			tmp += 31;
		case 11:
			tmp += 30;
		case 10:
			tmp += 31;
		case 9:
			tmp += 30;
		case 8:
			tmp += 31;
		case 7:
			tmp += 31;
		case 6:
			tmp += 30;
		case 5:
			tmp += 31;
		case 4:
			tmp += 30;
		case 3:
			tmp += 31;
		case 2:
			tmp += 28;
		case 1:
			tmp += 31;
		}
		
		return tmp;
	}
	
}


你可能感兴趣的:(日期计算)