計算給定日期的前一天(不使用jdk 日期函數)

題目已過期。

要求:

匯付的一筆試題,要求計算給定日期的前一天,日期格式"YYYYMMDD",不能使用Date、Calendar相關日期的操作方法

步驟:

1、先分割出給定日期的年、月、日,轉成int類型

2、日期-1,分爲1號和非1號

    1號特殊操作,月份-1,需判斷是否閏年,天數爲最大(特殊月

     月份-1,需判斷是否是減成了0,是的話年-1,月12,日31(跨年

3、toString 年、月、日轉String並補零

package net.leo.java.date;

/**
 * 要求計算給定日期的前一天 
 * 不使用java API中的Date和Calendar 
 * 日期格式如“20101202”
 * 
 * @title YesdayNoAPI
 * @description
 * @author cxh
 * @version
 * @create_date 2013-7-10
 * @copyright (c)
 */
public class YesdayNoAPI {

	// 2月天數
	private int MAXDAYS_FEBRUARY;

	private int year, month, day;

	public static void main(String[] args) {
		String todayStr = "00100101";
		System.out.println("today is:" + todayStr);
		YesdayNoAPI ins = new YesdayNoAPI();
		ins.getYesday(todayStr);
		System.out.println(ins.parseString());
	}
	
	/**
	 * 分割年月日
	 * 
	 * @description
	 * @author cxh
	 * @param todayStr
	 */
	private void split(String todayStr) {
		year = Integer.valueOf(todayStr.substring(0, 4));
		month = Integer.valueOf(todayStr.substring(4, 6));
		day = Integer.valueOf(todayStr.substring(6));
	}
	
	/**
	 * 獲取前一天
	 * 
	 * @description
	 * @author cxh
	 * @param todayStr
	 */
	public void getYesday(String todayStr) {

		split(todayStr);

		// 天數-1
		if (day == 1) {
			decMonth();
		} else {
			day -= 1;
		}
	}

	/**
	 * 月-1 說明天數爲1號
	 * 
	 * @description
	 * @author cxh
	 */
	private void decMonth() {
		switch (--month) {
		// 跨年
		case 0:
			--year;
			month = 12;
			day = 31;
			break;
		case 2:
			// 潤平判斷
			isLeapYear();
			day = MAXDAYS_FEBRUARY;
			break;
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
			day = 31;
			break;
		default:
			day = 30;
			break;
		}
	}

	/**
	 * 判斷是否閏年 賦值2月天數
	 * 
	 * @description
	 * @author cxh
	 */
	private void isLeapYear() {
		if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
			MAXDAYS_FEBRUARY = 29;
		} else {
			MAXDAYS_FEBRUARY = 28;
		}
	}

	/**
	 * toString
	 * 
	 * @description
	 * @author cxh
	 * @return
	 */
	private String parseString() {
		String dayStr = "" + day;
		String monthStr = "" + month;
		String yearStr = "" + year;
		// 補0
		if (day < 10) {
			dayStr = "0" + day;
		}
		if (month < 10) {
			monthStr = "0" + month;
		}
		for (int i = yearStr.length(); i < 4; i++) {
			yearStr = "0" + yearStr;
		}

		return "yesday is:" + yearStr + monthStr + dayStr;

	}
}

 

結果:

情況1:遇到2月

today is:20100301

yesday is:20100228

情況2:遇到跨年

today is:20100101

yesday is:20091231

情況3:遇到跨世紀

today is:00100101

yesday is:00091231

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章